44 votes

Comment redémarrer automatiquement un processus en arrière-plan Linux en cas d'échec ?

J'ai un processus qui est exécuté par un script init.d en arrière-plan. Par exemple:

case "$1" in 
    start)
       /bin/myprocess &
    stop)
       killall myprocess
    restart)
       killall myprocess
       /bin/myprocess &
esac

Dans certaines conditions, mon processus peut échouer et renvoyer une erreur. Existe-t-il un moyen (standard) de détecter son échec et de le redémarrer automatiquement?

0voto

Michael Qin Points 109

Si vous n'êtes pas un super utilisateur ou root, et si votre système Linux a Docker installé, alors vous pouvez créer une image Docker de votre processus, en utilisant Docker pour redémarrer votre processus si le système est redémarré.

Fichier: docker-compose.yml

version: "3"
services:
  lserver:
    image: votre_image_docker:latest
    ports:
    - 8080:8080   # utilisez simplement 8080 comme exemple
    restart: always  # c'est là où votre processus peut être garanti de redémarrer

Pour démarrer votre conteneur Docker,

docker-compose up -d

Je trouve que c'est facile de gérer mon propre processus avec un redémarrage automatique si je ne suis pas un super utilisateur du système.

Pour un exemple de création d'une image Docker, voici un exemple rapide :

Fichier: Dockerfile

FROM alpine:3.5

RUN apk update && apk upgrade && rm -rf /var/cache/apk/*
WORKDIR /app
COPY my-process-server /app
RUN ln -s /app/my-process-server /usr/local/bin/my-process-server

EXPOSE 8080

CMD ["my-process-server"]

0voto

Hans Points 242

Dans mon cas, en solution temporaire, j'ai modifié et utilisé la solution de @Trylks pour envelopper le programme que je lançais. Je voulais qu'il se termine uniquement sur une sortie propre.

Devrait fonctionner dans la plupart des shells:

#!/bin/sh

echo ""
echo "Utilisation: $0 ./programme"
echo ""

#eg="/usr/bin/apt update"

echo "Execution de $1 ..."

CODE_SORTIE=1
(while [ $CODE_SORTIE -gt 0 ]; do
    $1
    # boucle sur le code d'erreur : supérieur à 0
    CODE_SORTIE=$?
done) &

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X