5 votes

Échec du démarrage de nginx.service : Authentification interactive requise. avec crontab

J'essaie de faire un crontab pour commencer nginx s'il est arrêté.

J'ai cherché sur Google et j'ai trouvé ces deux scripts.

http://www.akamaras.com/linux/linux-script-pour-vérifier-si-un-service-est-en-cours-et-le-démarrer-s'il-est-arrêté/

#!/bin/bash
service=replace_me_with_a_valid_service

if (( $(ps -ef | grep -v grep | grep $service | wc -l) > 0 ))
then
echo "$service is running!!!"
else
/etc/init.d/$service start
fi

si je l'exécute manuellement, cela fonctionne bien en faisant source scriptName après l'avoir ajouté à crontab même si le service est arrêté, il continue de renvoyer l'écho. nginx is running et ne démarre pas le service.

Puis j'ai trouvé un autre script dans digital ocean

https://www.digitalocean.com/community/tutorials/how-to-use-a-simple-bash-script-à-relancer-les-programmes-serveur

#!/bin/sh

ps auxw | grep nginx | grep -v grep > /dev/null

if [ $? != 0 ]
then
        /etc/init.d/nginx start > /dev/null
fi

encore une fois si je l'exécute manuellement ça marche, mais il demandera le mot de passe de l'utilisateur

==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to start 'nginx.service'.
Authenticating as: abc,,, (abc)

après avoir tapé le mot de passe ==== AUTHENTICATION COMPLETE === s'affiche et commence nginx

puis j'ajoute le script dans la crontab...j'obtiens cette erreur de permission

Failed to start nginx.service: Interactive authentication required.

Quelqu'un sait-il comment je peux réparer cela ?

Merci d'avance pour tout conseil.

3voto

Michael Hampton Points 232226

Ces scripts que vous avez essayé d'utiliser sont obsolètes et ne devraient pas être utilisés sur un système moderne avec systemd.

Essayez plutôt un script comme celui-ci :

#!/bin/bash
if ! systemctl is-active nginx >/dev/null ; then
    systemctl start nginx
fi

Mais, c'est un peu un piratage terriblement méchant y probablement pas nécessaire donc avant tu fais ça essayez. faire redémarrer nginx automatiquement par systemd si elle s'arrête. Faites-le avec un drop-in de systemd :

[Service]
Restart=always

que vous placez comme le fichier /etc/systemd/system/nginx.service.d/override.conf (en créant le répertoire s'il n'existe pas). Vous pouvez également utiliser systemctl edit nginx pour créer le fichier.

Et bien sûr, soit la création du drop-in systemd, soit le placement de ce script dans la crontab, doit être fait en tant que root (essayez d'utiliser sudo -i pour une racine de longue durée Shell).

0 votes

Merci beaucoup pour l'information, savez-vous combien de temps il faut pour vérifier et redémarrer ? Pour que je puisse garder un œil sur mon dev en tant que test.

0 votes

@Dora systemd s'en apercevra et redémarrera immédiatement, vous devriez donc essayer cette méthode en premier.

0 votes

Presque juste à temps pour cela, j'ai ajouté l'élément restart puis j'ai démarré mon nginx. Si je me souviens bien, il est presque temps qu'il s'arrête d'une manière ou d'une autre dans les 45 minutes à venir.

2voto

kubanczyk Points 13302

Ne le faites pas du tout via cron.

Nginx lui-même est très stable, il n'arrête pas le service sans raison. Vous pouvez cependant le rendre instable avec une application. Si l'application est instable, il suffit de try-restart toutes les heures, tous les jours, toutes les semaines, peu importe.

C'est moins une panne que d'attendre 30 secondes que le cron se déclenche. Vous pouvez redémarrer la nuit, alors que vous pouvez être sûr que toute instabilité vous touchera lorsque le trafic sera élevé.

Il y a de fortes chances que vous arrêtiez nginx pour des raisons de maintenance et que vous soyez surpris par le fait que cron le redémarre au milieu de votre travail.

Pensez à la grappe de stimulateurs cardiaques si l'environnement est très instable.

Et travailler/insister sur les bugs d'application à corriger, pour qu'il puisse fonctionner un mois sans accrochage/mort.

0 votes

Je comprends tout à fait ce que vous voulez dire, c'est en fait une solution temporaire pour le moment, pendant que nous essayons de comprendre ce qui se passe. Ce qui est bizarre maintenant, c'est qu'il s'arrête tous les jours environ entre 0000 - 0030 et 1200 - 1230. Et je dois le démarrer manuellement. J'ai vérifié les logs et tout le reste mais je n'ai rien trouvé du tout. J'essaie toujours de comprendre pièce par pièce, mais pour l'instant, c'est une solution temporaire pour me donner un peu de répit et ne pas avoir à vérifier toutes les douze heures.

0 votes

Ah, je vois. Cela correspond à la notion de "groupe de stimulateurs cardiaques si l'environnement est très instable". Même un pacemaker à un nœud a une capacité de redémarrage de service @Dora.

0 votes

J'ai un peu cherché sur Google, donc je dois installer quelque chose qui s'appelle pacemaker et Corosync ? avez-vous un bon tutoriel pour cela ? Je suis encore un peu novice en la matière.

-1voto

simsek Points 101

Je suis d'accord avec le commentaire selon lequel vous ne devriez pas faire cela par cron. Cependant, si vous insistez toujours, je pense que le problème se pose car vous n'obtenez pas l'autorisation par la commande sudo -s.

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