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 echos, 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