12 Commits

2 changed files with 119 additions and 9 deletions

View File

@@ -1,11 +1,10 @@
# `rsm` - Runit Service Manager
===================================
- This is the CLI Runit Service Manager {rsm}, forked from Void Service Manager {vsv} https://github.com/bahamas10/vsv/blob/master/vsv
- Terminal Commands are exactly the same as sv, but produces a beautified layout.
![](https://imgur.com/jxQUIGb.png)
![](https://imgur.com/cpRWBo1.png)
## Manage and view runit services.
@@ -18,10 +17,12 @@ Quick Examples:
- `rsm status` - same as above
- `rsm stop <svc>` - stop a service
- `rsm start <svc>` - start a service
- `rsm restart <svc>` - restart a service
- `rsm restart <svc>` - restart a service, or start service right after `rsm enable <svc>`
- `rsm enable <svc>` - enable a service (autostart at boot)
- `rsm disable <svc>` - disable a service (no autostart at boot)
- `rsm hup <svc>` - refresh a service (`SIGHUP`)
- `rsm logs <svc>` or `rsm alllogs <svc>` - lists all logs for a service (access and error)
- `rsm errorlogs <svc>` - lists all error logs for a service
Status:

121
rsm
View File

@@ -1,14 +1,21 @@
#!/usr/bin/env bash
#
# Void Linux service manager (runit)
# Artix Linux service manager (runit)
# Forked and further developed, by: linuxer <linuxer@artixlinux.org>
# Fork Date: August 15, 2020 as rsv
# Renamed and further developed as rsm from: January 10, 2021
#
# Author: Dave Eddy <dave@daveeddy.com>
# Original Author (vsv): Dave Eddy <dave@daveeddy.com>
# Date: August 29, 2018
# License: MIT
RSM_VERSION='v1.3.7'
RSM_VERSION='v1.4.2'
export SVDIR=${SVDIR:-/run/runit/service/}
export LOGDIR="/var/log/"
export RSVDIR="/run/runit/service/"
export FLDIR=${FLDIR:-/etc/runit/sv/}
charup='✔'
chardown='X'
@@ -116,13 +123,14 @@ usage() {
cat <<EOF
$colormagenta ______ ____ __ __
$colormagenta | | \ \ / ___\ | \/ | $colorgreen Runit Service Manager ($RSM_VERSION)
$colormagenta | | \ \ / ___\ | \/ | $colorgreen Runit Service Manager for Artix Linux ($RSM_VERSION)
$colormagenta | |_/ / \____ | || | $colorgreen Source: https://gitea.artixlinux.org/linuxer/Runit-Service-Manager
$colormagenta | | \ \ \____/ | || | $colorgreen MIT License
$logo $colorblue Manage and view runit services
$logo $colorblue Made specifically for Void Linux but should work anywhere
$logo $colorblue Author: Dave Eddy <dave@daveeddy.com> (bahamas10)
$logo $colorblue Forked specifically for Artix Linux and renamed to rsm, for further development
${coloryellow}USAGE:${colorgreen}
$progname [OPTIONS] [SUBCOMMAND] [<ARGS>]
@@ -160,6 +168,10 @@ ${colorgreen}start <service> $cr Start the service
${colorgreen}stop <service> $cr Stop the service
${colorgreen}restart <service> $cr Restart the service
${colorgreen}reload <service> $cr Reload the service (send SIGHUP)
${colorgreen}logs <service> $cr Outputs the service's logfilenames and their access & error logs from /var/log/<serice>/
${colorgreen}alllogs <service> $cr The same like logs <service>
${colorgreen}errorlogs <service> $cr Outputs the service's logfilenames and their errorlogs from /var/log/<serice>/
${coloryellow}EXAMPLES:${colorgreen}
${colorgreen}$progname $cr Show service status in /var/service
@@ -449,7 +461,7 @@ do_enable_disable() {
fi
# ensure service exists
if ! [[ -d $svc ]]; then
if ! [[ -d ${FLDIR}${svc} ]]; then
rmsg -1 "service directory '$svc' does not exist" >&2
continue
fi
@@ -462,6 +474,8 @@ do_enable_disable() {
if ! rm -f "$file"; then
rmsg 1 "failed to enable '$svc'"
ret=1
else
ln -s ${FLDIR}${svc} ${SVDIR}
fi
;;
disable)
@@ -469,6 +483,8 @@ do_enable_disable() {
if ! disable_message "$svc" > "$file"; then
rmsg 1 "failed to disable '$svc'"
ret=1
else
unlink ${SVDIR}${svc}
fi
;;
*)
@@ -482,6 +498,89 @@ do_enable_disable() {
return "$ret"
}
# show logs
do_show_logs() {
monitors_array=($(xrandr -q))
local cmd=$1
local svc
local ret=0
local file
shift
# Loop all arguments as services
msg "Running $progname $cmd $*"
for svc in "$@"; do
# Validate service name
if ! [[ $svc =~ $svc_re ]]; then
rmsg -1 "unexpected characters in name: '$svc'" >&2
continue
fi
done
if ! [[ -d ${RSVDIR}${cmd} ]]; then
printf "\n%20s\n" "${colorgreen}The following log files found:"
local logs_files_array=($(ls /var/log/$cmd/*.*))
printf "\n$colorblue"
printf '%s\n' "${logs_files_array[@]}"
printf "\n$colormagenta"
read -n 1 -s -r -p "Press any key to continue"
printf "\n"
printf "\n${colorcyan}Log files full output:\n"
printf "${coloryellow}\n"
printf "${coloryellow}${opt}"
tail -n 10 ${LOGDIR}${cmd}/*.* | more
printf "\n"
fi
rmsg "$ret" "[$progname $cmd $*], exit code: $ret"
return "$ret"
}
# show error logs
do_show_err_logs() {
local cmd=$1
local svc
local ret=0
local file
shift
# Loop all arguments as services
msg "Running $progname $cmd $*"
for svc in "$@"; do
# Validate service name
if ! [[ $svc =~ $svc_re ]]; then
rmsg -1 "unexpected characters in name: '$svc'" >&2
continue
fi
done
if ! [[ -d ${RSVDIR}${cmd} ]]; then
printf "\n%20s\n" "${colorred}The following error log files found:"
local logs_files_array=($(ls /var/log/$cmd/*error*.*))
printf "\n$colorblue"
printf '%s\n' "${logs_files_array[@]}"
printf "\n$colormagenta"
read -n 1 -s -r -p "Press any key to continue"
printf "\n"
printf "\n${colorcyan}Log files full output:\n"
printf "${coloryellow}\n"
printf "${coloryellow}${opt}"
tail -n 10 ${LOGDIR}${cmd}/*error*.* | more
printf "\n"
fi
rmsg "$ret" "[$progname $cmd $*], exit code: $ret"
return "$ret"
}
# handle any other subcommand
do_sv_cmd() {
if (($# < 2)); then
@@ -500,7 +599,7 @@ colors_set=false
tree=false
log=false
do_usage=-1
verbosity=0
verbosity=1
while getopts 'c:d:hltuvV' option; do
case "$option" in
c) setcolors "$OPTARG"; colors_set=true;;
@@ -540,6 +639,16 @@ case "$cmd" in
enable|disable)
do_enable_disable "$cmd" "$@"
;;
logs)
do_show_logs "$@"
;;
alllogs)
do_show_logs "$@"
;;
errorlogs)
do_show_err_logs "$@"
;;
*)
if $tree; then
rmsg -1 "-t can only be specified with 'status'"