Runit Service Listing
Jul 21 2022 · LastMod: Jul 21 2022
User specified services are in /usr/local/etc/runsvdir-$USER
. Note that the formatting is for POSIX shell. Bash requires escaping echo
s, i.e. echo -> echo -e
, to work properly.
Listing
1#!/bin/sh
2
3GREEN='\033[0;32m'
4CYAN='\033[0;36m'
5NC='\033[0m'
6
7SYS_SVDIR="/etc/runit/sv"
8SYS_RUNSVDIR="/run/runit/service"
9USER_RUNSVDIR="/usr/local/etc/runsvdir-$USER"
10USER_SVDIR="/usr/local/etc/svdir-$USER"
11
12BIN_NAME=${0##*/}
13
14list_all(){
15 echo "${CYAN}SYSTEM:$NC"
16 ls -1 $SYS_SVDIR
17
18 echo "\n${CYAN}USER:$NC"
19 ls -1 $USER_SVDIR
20}
21
22all_status(){
23 echo "${CYAN}SYSTEM:$NC"
24 sudo sv status $SYS_RUNSVDIR/*
25
26 echo "\n${CYAN}USER:$NC"
27 sv status $USER_RUNSVDIR/*
28}
29
30list_running(){
31 echo "${CYAN}SYSTEM:$NC"
32 sudo fd pid $SYS_RUNSVDIR -t f -L | sudo xargs cat | xargs ps -fp
33
34 echo "\n${CYAN}USER:$NC"
35 fd pid $USER_RUNSVDIR -t f -L | xargs cat | xargs ps -fp 2>/dev/null
36}
37
38list_supervised(){
39 echo "${CYAN}SYSTEM:$NC"
40 ls -1 $SYS_RUNSVDIR
41
42 echo "\n${CYAN}USER:$NC"
43 ls -1 $USER_RUNSVDIR
44}
45
46list_disabled(){
47 echo "${CYAN}SYSTEM:$NC"
48 sudo fd down $SYS_RUNSVDIR -t f -L | awk -F/ '{print $(NF-1)}'
49
50 echo "\n${CYAN}USER:$NC"
51 fd down $USER_RUNSVDIR -t f -L | awk -F/ '{print $(NF-1)}'
52}
53
54list_not_supervised(){
55 echo "${CYAN}SYSTEM:$NC"
56 ls -1 $SYS_RUNSVDIR $SYS_SVDIR | grep -v : | sort | uniq -u
57
58 echo "\n${CYAN}USER:$NC"
59 ls -1 $USER_SVDIR $USER_RUNSVDIR | grep -v : | sort | uniq -u
60}
61
62list_stopped(){
63 echo "${CYAN}SYSTEM:$NC"
64 sudo fd pid $SYS_RUNSVDIR -t f -L | sudo xargs -I {} sh -c "[ ! -s {} ] && echo {}" | awk -F/ '{print $(NF-2)}'
65
66
67 echo "\n${CYAN}USER:$NC"
68 fd pid $USER_RUNSVDIR -t f -L | xargs -I {} sh -c "[ ! -s {} ] && echo {}" | awk -F/ '{print $(NF-2)}'
69}
70
71help(){
72cat <<EOF
73 $BIN_NAME r running
74 $BIN_NAME s down(stopped)
75
76 $BIN_NAME a all
77
78 $BIN_NAME u supervised
79 $BIN_NAME n not supervised
80 $BIN_NAME d disabled(not auto starting)
81 $BIN_NAME z show status of all supervised services
82EOF
83}
84
85case $1 in
86 r*) list_running ;;
87 d*) list_disabled ;;
88 u*) list_supervised ;;
89 a*) list_all ;;
90 n*) list_not_supervised ;;
91 s*) list_stopped ;;
92 z*) all_status ;;
93 *) help ;;
94esac
The following implementation uses find
instead of fd
1#!/bin/sh
2
3GREEN='\033[0;32m'
4CYAN='\033[0;36m'
5NC='\033[0m'
6
7SYS_SVDIR="/etc/runit/sv"
8SYS_RUNSVDIR="/run/runit/service"
9USER_RUNSVDIR="/usr/local/etc/runsvdir-$USER"
10USER_SVDIR="/usr/local/etc/svdir-$USER"
11
12BIN_NAME=${0##*/}
13
14list_all(){
15 echo "${CYAN}SYSTEM:$NC"
16 ls -1 $SYS_SVDIR
17
18 echo "\n${CYAN}USER:$NC"
19 ls -1 $USER_SVDIR
20}
21
22all_status(){
23 echo "${CYAN}SYSTEM:$NC"
24 sudo sv status $SYS_RUNSVDIR/*
25
26 echo "\n${CYAN}USER:$NC"
27 sv status $USER_RUNSVDIR/*
28}
29
30list_running(){
31 echo "${CYAN}SYSTEM:$NC"
32 sudo find -L $SYS_RUNSVDIR -type f -name pid | sudo xargs cat | xargs ps -fp
33
34 echo "\n${CYAN}USER:$NC"
35 find -L $USER_RUNSVDIR -type f -name pid | xargs cat | xargs ps -fp
36}
37
38list_supervised(){
39 echo "${CYAN}SYSTEM:$NC"
40 ls -1 $SYS_RUNSVDIR
41
42 echo "\n${CYAN}USER:$NC"
43 ls -1 $USER_RUNSVDIR
44}
45
46list_not_supervised(){
47 echo "${CYAN}SYSTEM:$NC"
48 ls -1 $SYS_RUNSVDIR $SYS_SVDIR | grep -v : | sort | uniq -u
49
50 echo "\n${CYAN}USER:$NC"
51 ls -1 $USER_SVDIR $USER_RUNSVDIR | grep -v : | sort | uniq -u
52}
53
54list_disabled(){
55 echo "${CYAN}SYSTEM:$NC"
56 sudo find -L $SYS_RUNSVDIR -type f -name down | awk -F/ '{print $(NF-1)}'
57
58 echo "\n${CYAN}USER:$NC"
59 find -L $USER_RUNSVDIR -type f -name down | awk -F/ '{print $(NF-1)}'
60}
61
62list_stopped(){
63 echo "${CYAN}SYSTEM:$NC"
64 sudo find -L $SYS_RUNSVDIR -type f -name pid| sudo xargs -I {} sh -c "[ ! -s {} ] && echo {}" | awk -F/ '{print $(NF-2)}'
65
66
67 echo "\n${CYAN}USER:$NC"
68 find -L $USER_RUNSVDIR -type f -name pid | xargs -I {} sh -c "[ ! -s {} ] && echo {}" | awk -F/ '{print $(NF-2)}'
69}
70
71help(){
72cat <<EOF
73 $BIN_NAME r running
74 $BIN_NAME s down(stopped)
75
76 $BIN_NAME a all
77
78 $BIN_NAME u supervised
79 $BIN_NAME n not supervised
80 $BIN_NAME d disabled(not auto starting)
81 $BIN_NAME z show status of all supervised services
82EOF
83}
84
85case $1 in
86 r*) list_running ;;
87 d*) list_disabled ;;
88 u*) list_supervised ;;
89 a*) list_all ;;
90 s*) list_stopped ;;
91 z*) all_status ;;
92 *) help ;;
93esac
Managing
1#!/bin/sh
2
3BIN_NAME=${0##*/}
4
5USER_RUNSVDIR="/usr/local/etc/runsvdir-$USER"
6USER_SVDIR="/usr/local/etc/svdir-$USER"
7SYS_SVDIR="/etc/runit/sv"
8SYS_RUNSVDIR="/run/runit/service"
9
10user_start(){
11 export SVDIR=$USER_RUNSVDIR
12 fd pid $USER_RUNSVDIR -t f -L | xargs -I {} sh -c "[ ! -s {} ] && echo {}" | awk -F/ '{print $(NF-2)}' | fzf --prompt="Start User Service >" | xargs -I {} sv start {}
13}
14
15system_start(){
16 sudo fd pid $SYS_RUNSVDIR -t f -L | sudo xargs -I {} sh -c "[ ! -s {} ] && echo {}" | awk -F/ '{print $(NF-2)}' | fzf --prompt="Start System Service >" | sudo xargs -I {} sv start {}
17}
18
19user_stop(){
20 export SVDIR=$USER_RUNSVDIR
21 fd pid $USER_RUNSVDIR -t f -L | xargs -I {} sh -c "[ -s {} ] && echo {}" | awk -F/ '{print $(NF-2)}' | fzf --prompt="Stop User Service >" | xargs -I {} sv stop {}
22}
23
24system_stop(){
25 sudo fd pid $SYS_RUNSVDIR -t f -L | sudo xargs -I {} sh -c "[ -s {} ] && echo {}" | awk -F/ '{print $(NF-2)}' | fzf --prompt="Stop System Service >" | sudo xargs -I {} sv stop {}
26}
27
28help(){
29cat <<EOF
30 $BIN_NAME sr system start
31 $BIN_NAME ss system stop
32 $BIN_NAME ur user start
33 $BIN_NAME us user stop
34 $BIN_NAME * help
35EOF
36}
37
38case $1 in
39 "sr") system_start ;;
40 "ss") system_stop ;;
41 "ur") user_start ;;
42 "us") user_stop ;;
43 *) help ;;
44esac