Portál AbcLinuxu, 10. května 2025 07:03
#!/bin/sh
if [ -n "`pidof thttpd`" ]; then
killall thttpd 2>/dev/null
fi
/opt/sbin/thttpd -C /opt/etc/thttpd.conf
ktory po restarte routra spusti thttpd s danym nastavenim. Obcas sa ale stane (a doteraz neviem preco), ze sa tento proces vypne (mozno spadne sam, neviem..). Rozmyslam nad riesenim problemu a vychadza mi, ze by som mohol do cronjobu spravit, ze kazdu minutu bude kontrolovat, ci bezi proces "/opt/sbin/thttpd -C /opt/etc/thttpd.conf" a ak by nebezal, tak by ho zapol. Prosim Vas, ake riadky by som mal dat do spustaneho cronjobu (suboru?)? diky moc
Řešení dotazu:
#!/bin/bash #Tento spustitelny soubor se ma chovat jako daemon. #Spousti se prikazem, umistenym v /etc/rc.local: #nohup /kde/je/umisteny/tento/mujdemon >&/dev/null& #(`nohup /kde/je/umisteny/tento/mujdemon >/dev/null 2>&1&`) #Ukoncuje se prikazem: #kill $(pgrep mujdemon) >/dev/null 2>&1 #Number SIG Meaning #0 0 On exit from shell #1 SIGHUP Clean tidyup #2 SIGINT Interrupt #3 SIGQUIT Quit #6 SIGABRT Abort #9 SIGKILL Die Now (cannot be trap'ped) #14 SIGALRM Alarm Clock #15 SIGTERM Terminate #How kill sleep trap 'echo stop >/dev/null; kill $(jobs -p)' 0 1 2 3 6 15 log="/opt/mujdemonthttpd_log" logername="thttpd" while true; do sleep 120 logerpid="$(/usr/bin/pgrep -x $logername)" if [ -z "$logerpid" ]; then aktualnicas=`date +"%d.%m.%Y_%H:%M"` echo "$(echo $aktualnicas)_mujdemon_restartoval_thttpd, ktery umrel" >>"$log" /opt/etc/init.d/S80thttpd >/dev/null 2>&1 fi done Nebo by stačilo jen: #!/bin/bash #Tento spustitelny soubor se ma chovat jako daemon. #Spousti se prikazem, umistenym v /etc/rc.local: #nohup /kde/je/umisteny/tento/mujdemon >&/dev/null& #Ukoncuje se prikazem: #kill $(pgrep mujdemon) >/dev/null 2>&1 #How kill sleep trap 'echo stop >/dev/null; kill $(jobs -p)' 0 1 2 3 6 15 while true; do sleep 120 /opt/etc/init.d/S80thttpd >/dev/null 2>&1 done
while true; ...
asi bude stačit.
Celá šílená konstrukce by se vyřešila použitím fungujícího initu, konkrétně tedy systemd, který hlídá spuštěné služby a umí je restartovat, když spadnou (Restart=on-failure)To sa už nerobí pomocou inittab?
Valid actions for the action field are: respawn The process will be restarted whenever it terminates (e.g. getty).
thttpd -D
init
jednoducho čaká na SIGCHLD
od child-procesu a ak ten child-proces spustil pre riadok v inittabe, ktorý má respawn
, tak ten child pustí znova. Z toho hľadiska je jedno, či ten child process skončí normálne, alebo nie.
#!/bin/bash # Service name while true; do SERVICE=“vlc“ SPHINXPID=$(pgrep $SERVICE) if [[ -z "$SPHINXPID" ]]; then # Not run! vlc else # All is OK echo „$SERVICE running.“ fi unset SPHINXPID unset SERVICE sleep 1 done
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.