NEWS
Überwachung iobroker auf Absturz
-
Hallo,
folgendes habe ich gebastelt, um meinen iobroker neu zu starten, falls er mal das zeitliche segnet (passiert bei mir so alle paar Tage)
#!/bin/bash logfile=/opt/test-iobroker.log if [ $(ls -1 /opt | grep -c noiobroker) = 0 ]; then echo "$(date) ioBroker sollte laufen" else echo "$(date) ioBroker gestoppt" exit 0 fi echo "$(date) Teste" if [ $(ps -A | grep -c io.js-controlle) = 0 ]; then echo "$(date) io.js-controlle laueft nicht" >> $logfile /opt/kill-iobroker.sh >> $logfile echo "$(date) Prozesse gestoppt" >> $logfile sleep 60 echo "$(date) Starte iobroker" >> $logfile cd /opt/iobroker iobroker start >> $logfile echo "$(date) iobroker gestartet" >> $logfile else echo "$(date) alle ok" >> $logfile fi
Es wird geprüft ob die Datei /opt/noiobroker vorhanden ist, wenn ja, dann soll aktuell auch kein iobroker laufen
z.B. beim Backup
#!/bin/bash echo "$(date) Starte Backup" touch /opt/noiobroker
Am Ende des Scripts natürlich nicht vergessen /opt/noiobroker zu löschen
echo "$(date) Beende Backup" rm /opt/noiobroker
Um das ganze zu automatisieren:
/etc/crontab ergänzen um:
(*/x = alle x Minuten)
# /etc/crontab: system-wide crontab # Unlike any other crontab you don't have to run the `crontab' # command to install the new version when you edit this file # and files in /etc/cron.d. These files also have username fields, # that none of the other crontabs do. SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # m h dom mon dow user command 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) 0 4 * * * root /opt/backup.sh >> /opt/backup.log */5 * * * * root /opt/test-iobroker.sh >> /opt/test-iobroker.log #
Und zu guter letzt noch das
#!/bin/bash killall -9 io.js-controller killall -9 io.admin.0 pgrep -f '^io.*' |xargs kill -9 pgrep -f '^node-red*' |xargs kill -9
Hier ggf. noch weitere Adapter ergänzen.
Wenn ihr nach dem Neustart im log Meldungen seht das Adapter neu gestartet werden aber noch welche laufen, dann habt ihr hier einen Adapter vergessen.
-
Hat OSX auch killall Kommando?
-
Hat OSX auch killall Kommando? `
Ja:
KILLALL(1) BSD General Commands Manual KILLALL(1) NAME killall -- kill processes by name SYNOPSIS killall [-delmsvz] [-help] [-u user] [-t tty] [-c procname] [-SIGNAL] [procname ...] DESCRIPTION The killall utility kills processes selected by name, as opposed to the selection by pid as done by kill(1). By default, it will send a TERM signal to all processes with a real UID identical to the caller of killall that match the name procname. The super-user is allowed to kill any process. The options are as follows: -v Be more verbose about what will be done. -e Use the effective user ID instead of the (default) real user ID for matching processes specified with the -u option. -help Give a help on the command usage and exit. -l List the names of the available signals and exit, like in kill(1). -m Match the argument procname as a (case sensitive) regu- lar expression against the names of processes found. CAUTION! This is dangerous, a single dot will match any process running under the real UID of the caller. -s Show only what would be done, but do not send any sig- nal. -d Print detailed information about the processes matched, but do not send any signal. -SIGNAL Send a different signal instead of the default TERM. The signal may be specified either as a name (with or without a leading SIG), or numerically. -u user Limit potentially matching processes to those belonging to the specified user. -t tty Limit potentially matching processes to those running on the specified tty. -c procname When used with the -u or -t flags, limit potentially matching processes to those matching the specified procname. -z Do not skip zombies. This should not have any effect except to print a few error messages if there are zom- bie processes that match the specified pattern. ALL PROCESSES Sending a signal to all processes with uid XYZ is already supported by kill(1). So use kill(1) for this job (e.g. $ kill -TERM -1 or as root $ echo kill -TERM -1 | su -m <user>) EXIT STATUS The killall command will respond with a short usage message and exit with a status of 2 in case of a command error. A status of 1 will be returned if either no matching process has been found or not all processes have been signalled successfully. Otherwise, a status of 0 will be returned. DIAGNOSTICS Diagnostic messages will only be printed if requested by -d options. SEE ALSO kill(1), sysctl(3) HISTORY The killall command appeared in FreeBSD 2.1\. It has been modeled after the killall command as available on other platforms. AUTHORS The killall program was originally written in Perl and was contributed by Wolfram Schneider, this manual page has been written by Jorg Wunsch. The current version of killall was rewritten in C by Peter Wemm using sysctl(3).</user>
-
Das killen der Prozesse lässt sich universeller lösen.
pgrep -f '^io.*' |xargs kill -9 pgrep -f '^node-red*' |xargs kill -9
-
Hallo,
Danke. Hab ich so übernommen.
-
Anpassungen auf iobroker 0.8.0
Hallo,
if [ $(ps -A | grep -c iobroker.js) = 0 ]; then echo "$(date) iobroker.js-controller laueft nicht" >> $logfile
Und zu guter letzt noch das
#!/bin/bash killall -9 iobroker.js-controller killall -9 io.admin.0 pgrep -f '^iobroker.*' |xargs kill -9 pgrep -f '^io.*' |xargs kill -9 pgrep -f '^node-red*' |xargs kill -9 ```` `