Je cherche un moyen de configurer un service pour qu'il s'exécute automatiquement lorsqu'il s'arrête pour une raison quelconque. Actuellement, j'ai mis en place un cronjob qui vérifie si le service est exécuté toutes les minutes et le redémarre s'il s'est écrasé, mais cela semble ennuyeux. Comment puis-je faire cela dans le bon sens?
J'ai ajouté quelques scripts douteux pour que le service fonctionne, vous pouvez voir ci-dessous
x@x:~$ Sudo cat /etc/init.d/my-service
#!/bin/sh
### BEGIN INIT INFO
# Provides: my-service
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO
dir="/var/www/html/my-service"
cmd="nodejs chat.js"
user="www-data"
name=`basename $0`
pid_file="/var/run/$name.pid"
stdout_log="/var/log/$name.log"
stderr_log="/var/log/$name.err"
get_pid() {
cat "$pid_file"
}
is_running() {
[ -f "$pid_file" ] && ps `get_pid` > /dev/null 2>&1
}
case "$1" in
start)
if is_running; then
echo "Already started"
else
echo "Starting $name"
cd "$dir"
if [ -z "$user" ]; then
Sudo $cmd >> "$stdout_log" 2>> "$stderr_log" &
else
Sudo -u "$user" $cmd >> "$stdout_log" 2>> "$stderr_log" &
fi
echo $! > "$pid_file"
if ! is_running; then
echo "Unable to start, see $stdout_log and $stderr_log"
exit 1
fi
fi
;;
stop)
if is_running; then
echo -n "Stopping $name.."
kill `get_pid`
for i in {1..10}
do
if ! is_running; then
break
fi
echo -n "."
sleep 1
done
echo
if is_running; then
echo "Not stopped; may still be shutting down or shutdown may have f ailed"
exit 1
else
echo "Stopped"
if [ -f "$pid_file" ]; then
rm "$pid_file"
fi
fi
else
echo "Not running"
fi
;;
restart)
$0 stop
if is_running; then
echo "Unable to stop, will not attempt to start"
exit 1
fi
$0 start
;;
status)
if is_running; then
echo "Running"
else
echo "Stopped"
exit 1
fi
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
;;
esac
exit 0
Et aussi my-service.service
x@x:~$ cat /etc/systemd/system/my-service.service
[Unit]
Description=my-service daemon
[Service]
ExecStart=/usr/bin/nodejs /var/www/html/my-service/chat.js
Type=simple
User=root
Group=root
Restart=always
[Install]
WantedBy=multi-user.target
Par exemple, lorsque la machine redémarre, je reçois ce statut.
Jan 24 10:54:41 x systemd[1]: my-service.service: Service hold-off time over, scheduling restart.
Jan 24 10:54:41 x systemd[1]: Stopped my-service daemon.
Jan 24 10:54:41 x systemd[1]: my-service.service: Start request repeated too quickly.
Jan 24 10:54:41 x systemd[1]: Failed to start my-service daemon.
Vous pouvez utiliser l'outil monit . il est très petit et utile pour tout type de gestion et de surveillance de processus.
Après avoir téléchargé le package binaire de ce lien , vous pouvez l'extraire dans n'importe quel dossier de votre système, puis copier deux fichiers du package sur votre système pour l'installer:
cd /path/to/monit/folder
cp ./bin/monit /usr/sbin/monit
cp ./conf/monitrc /etc/monitrc
Maintenant, éditez /etc/monitrc
base sur vos besoins ( référence doc ). puis créez un fichier de contrôle init pour activer monit au démarrage. Maintenant, commencez à surveiller de cette façon:
initctl reload-configuration
start monit