> > IMHO daemontools for windows, if ported, can handle quite a variety > > of different setups, including one needed by openvpn. Then you can > > install it as part of openvpn install. > > If the only issue we had to solve here was how a normal user should be > able to spawn openvpn processes, I agree we should use already existing > software to solve this. > > However, this issue has grown abit larger than that. Our gui client needs > to: > > * Scan a directory for configuration files. > * A way to spawn processes (preferable portable) > * Maintain a table over on which port it can reach the openvpn > process management interface. > * Monitor that all openvpn processes are still alive > * Connect to all the openvpn processes and get status info
:) I will append 'man svscan' and 'man supervise'. Judge for yourself how many of your points are covered by them. Also I'll append my current 'ps -AH e' output. You can see there how completely different daemons are controlled by those tools. > There is no fancy hardcoded things we are talking about, so it could all > reside in the gui client, however I liked the idea of moving this > functionallity into a portable service manager. > > I need to code this regardless if we put it in the gui agent itself, or in > this service manager, so I think it makes more sence to put the effort > into a deamon from which other gui clients can benefit on all platforms, > instead of into my not-so-portable gui. No need to code it. Port it to Windows. That's all. -- vda svscan(8) svscan(8) NAME svscan - starts and monitors a collection of services SYNOPSIS svscan [ directory ] DESCRIPTION svscan starts one supervise(8) process for each subdirectory of the current directory, up to a limit of 1000 subdirectories. svscan skips subdirectory names starting with dots. supervise(8) must be in svs- can's path. svscan optionally starts a pair of supervise(8) processes, one for a subdirectory s, one for s/log, with a pipe between them. It does this if the name s is at most 255 bytes long and s/log exists. (In versions 0.70 and below, it does this if s is sticky.) svscan needs two free descriptors for each pipe. Every five seconds, svscan checks for subdirectories again. If it sees a new subdirectory, it starts a new supervise(8) process. If it sees an old subdirectory where a supervise(8) process has exited, it restarts the supervise(8) process. In the log case it reuses the same pipe so that no data is lost. svscan is designed to run forever. If it has trouble creating a pipe or running supervise(8), it prints a message to stderr; it will try again five seconds later. If svscan is given a command-line argument directory, it switches to that directory when it starts. SEE ALSO supervise(8), svc(8), svok(8), svstat(8), svscanboot(8), readprocti- tle(8), fghack(8), pgrphack(8), multilog(8), tai64n(8), tai64nlocal(8), setuidgid(8), envuidgid(8), envdir(8), softlimit(8), setlock(8) http://cr.yp.to/daemontools.html svscan(8) supervise(8) supervise(8) NAME supervise - starts and monitors a service. SYNOPSIS supervise s DESCRIPTION supervise switches to the directory named s and starts ./run. It restarts ./run if ./run exits. It pauses for a second after starting ./run, so that it does not loop too quickly if ./run exits immediately. If the file s/down exists, supervise does not start ./run immediately. You can use svc(8) to start ./run and to give other commands to super- vise. supervise maintains status information in a binary format inside the directory s/supervise, which must be writable to supervise. The status information can be read by svstat(8). supervise may exit immediately after startup if it cannot find the files it needs in s or if another copy of supervise is already running in s. Once supervise is successfully running, it will not exit unless it is killed or specifically asked to exit. You can use svok(8) to check whether supervise is successfully running. You can use svscan(8) to reliably start a collection of supervise processes. SEE ALSO svc(8), svok(8), svstat(8), svscanboot(8), svscan(8), readproctitle(8), fghack(8), pgrphack(8), multilog(8), tai64n(8), tai64nlocal(8), setu- idgid(8), envuidgid(8), envdir(8), softlimit(8), setlock(8) http://cr.yp.to/daemontools.html supervise(8) # ps -AH e PID TTY STAT TIME COMMAND 1 ? S 0:01 /bin/sh /init 2 ? SWN 0:00 [ksoftirqd/0] 3 ? SW< 0:00 [events/0] 4 ? SW< 0:00 [khelper] 20 ? SW< 0:00 [kblockd/0] 46 ? SW 0:00 [pdflush] 47 ? SW 0:00 [pdflush] 49 ? SW< 0:00 [aio/0] 479 ? SW< 0:00 [reiserfs/0] 48 ? SW 0:00 [kswapd0] 50 ? SW 0:00 [cifsoplockd] 214 ? SW 0:00 [kseriod] 392 ? S 0:00 devfsd /dev 681 ? S 0:00 rpc.portmap 993 ? S 0:00 svscan /var/service 995 ? S 0:00 supervise fw 996 ? S 0:00 supervise gpm 997 ? S 0:00 gpm -D -2 -m /dev/psaux -t ps2 1007 ? S 0:00 supervise ntp 1011 ? S 0:00 /bin/sh ./run 2274 ? S< 0:00 ntpdate -b -t 10 -p 4 -k /dev/null 1.1.1.1 PWD=/.local/var/service/ntp SHLVL=1 _=/usr/bin/ntpdate 1008 ? S 0:00 supervise log 1012 ? S 0:00 multilog t n5 /var/log/service/ntp 1009 ? S 0:00 supervise top 1036 ? S 0:19 top c s TERM=linux 1020 ? S 0:00 supervise ups 1021 ? S 0:00 supervise log 1022 ? S 0:00 multilog t =/var/log/service/ups/last.out /var/log/service/ups 1027 ? S 0:00 supervise klog 1031 ? S 0:00 klogd -n -c 3 -x 1028 ? S 0:00 supervise once 1040 ? S 0:00 supervise pptp 1041 ? S 0:00 supervise log 1056 ? S 0:00 multilog t /var/log/service/pptp 1047 ? S 0:00 supervise sshd 1048 ? S 0:00 tcpserver -v -R -H -l 0 -c 40 0.0.0.0 ssh setuidgid root sshd -i -e -u0 1049 ? S 0:00 supervise log 1091 ? S 0:00 multilog t /var/log/service/sshd 1064 ? S 0:00 supervise httpd 1075 ? S 0:00 tcpserver -v -R -H -l 0 -c 40 0.0.0.0 www setuidgid apache httpd -X -f /.local/var/service/httpd/httpd.conf 1065 ? S 0:00 supervise log 1076 ? S 0:00 multilog t /var/log/service/httpd 1066 ? S 0:00 supervise nmlog 1071 ? S 0:00 /bin/sh ./run 1072 ? S 0:00 /bin/sh ./run 1073 ? S 0:00 nmeter c l x lx p lp m lm nif nlo d120000 1074 ? S 0:00 logger -t 1067 ? S 0:00 supervise mysql 1068 ? S 0:00 /bin/sh ./run 1128 ? S 0:00 mysqld --user=mysql --datadir=/var/app/mysql-3.23.52/data --tmpdir=/var/app/mysql-3.23.52/tmp --socket=/.lo 1069 ? S 0:00 supervise log 1070 ? S 0:00 multilog t /var/log/service/mysql 1087 ? S 0:00 supervise pgsql 1088 ? S 0:00 supervise log 1101 ? S 0:00 multilog t /var/log/service/pgsql 1113 ? S 0:00 supervise serial0 1115 ? S 0:00 supervise dnscache_local 1130 ? S 0:00 ./dnscache ROOT=./root IP=0.0.0.0 IPSEND=0.0.0.0 FORWARDONLY=1 DATALIMIT=2000000 CACHESIZE=1000000 GID=50 UID 1116 ? S 0:00 supervise log 1132 ? S 0:00 multilog t /var/log/service/dnscache_local 1117 ? S 0:00 supervise nmeter 1138 ? S 0:00 nmeter t c l x lx p lp f lf b lb m lm nif nlo 1118 ? S 0:00 supervise ovpn-1 1297 ? S 0:00 openvpn --secret /.local/var/service/ovpn-1/key --dev tun --proto udp --port 8006 --remote 1.1.4.1 --ifconfig 1119 ? S 0:00 supervise log 1152 ? S 0:00 multilog /var/log/service/ovpn-1 1163 ? S 0:00 supervise getty_tty1 1164 ? S 0:00 supervise getty_tty2 1870 vc/2 S 0:00 agetty 38400 /dev/tty2 linux TERM=linux 1165 ? S 0:00 supervise getty_tty3 1218 vc/3 S 0:00 agetty 38400 /dev/tty3 linux TERM=linux 1166 ? S 0:00 supervise getty_tty4 1227 vc/4 S 0:00 agetty 38400 /dev/tty4 linux TERM=linux 1167 ? S 0:00 supervise getty_tty5 1231 vc/5 S 0:00 agetty 38400 /dev/tty5 linux TERM=linux 1168 ? S 0:00 supervise getty_tty6 1232 vc/6 S 0:00 agetty 38400 /dev/tty6 linux TERM=linux 1169 ? S 0:00 supervise getty_tty7 1233 vc/7 S 0:00 agetty 38400 /dev/tty7 linux TERM=linux 1170 ? S 0:00 supervise getty_tty8 1222 vc/8 S 0:00 agetty 38400 /dev/tty8 linux TERM=linux 1171 ? S 0:00 supervise syslog 1172 ? S 0:00 syslogd -n -f /.local/var/service/syslog/syslogd.conf 1247 ? S 0:00 multilog /var/log/syslog/auth.all 1252 ? S 0:00 multilog /var/log/syslog/daemon.all 1255 ? S 0:00 multilog /var/log/syslog/kern.all 1258 ? S 0:00 multilog /var/log/syslog/mark.all 1261 ? S 0:00 multilog /var/log/syslog/syslog.all 1264 ? S 0:00 multilog /var/log/syslog/user.all 1267 ? S 0:00 multilog /var/log/syslog/7.debug 1270 ? S 0:00 multilog /var/log/syslog/6.info 1273 ? S 0:00 multilog /var/log/syslog/5.notice 1276 ? S 0:00 multilog /var/log/syslog/4.warning 1279 ? S 0:00 multilog /var/log/syslog/3.err 1282 ? S 0:00 multilog /var/log/syslog/2.crit 1285 ? S 0:00 multilog /var/log/syslog/1.alert 1288 ? S 0:00 multilog /var/log/syslog/0.emerg 1176 ? S 0:00 supervise watch_quasar 1177 ? S 0:00 supervise automount 1179 ? S 0:00 /bin/sh ./run 1306 ? S 0:00 sleep 32000 1178 ? S 0:00 supervise watcher 1209 ? S 0:00 /bin/sh ./run 2278 ? S 0:00 sleep 33