Bonjour à tous !
Je viens vers vous car je deviens fou avec une tache cron !
Contexte :
J'ai une api REST écrite en node.js, l'api est executé dans un screen (nommé api).
J'ai écrit un petit script de monitoring, qui va checker si l'api est accessible, si non, je kill le screen "api", relance un nouveau screen et y execute la commande du lancement de l'api.
Lorsque j'execute la commande dans le shell, en root et que mon serveur est down, il est bien relancé, tout s'execute comme il faut.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 #!/bin/bash url='http://api.*******.com/monit' log="$(tail -n 50 /var/log/api/api.log)" status="$(curl -s -o /dev/null -w "%{http_code}" $url)" if [ $status = 502 ]; then screen -S api-X quit screen -d -m -S api timeout 1 screen -S api -X stuff $'api\n' # api est un raccourcis pour relancer le serveur timestamp=$(date +%s) log_file="/var/log/api/error_"$timestamp".log" echo $log > $log_file echo 'log :'$log_file | mailx -s "API server restarted" adresse@mail.fr fi timeout() { time=$1 command="/bin/sh -c \"$2\"" expect -c "set echo \"-noecho\"; set timeout $time; spawn -noecho $command; expect timeout { exit 1 } eof { exit 0 }" if [ $? = 1 ] ; then echo "Timeout after ${time} seconds" fi } exit 0
Par contre, lorsque j'inscrit l'execution au crontab
le screen est bien coupé, puis relancé, mais par contre la commande dans le screen n'est pas reconnue.
Code : Sélectionner tout - Visualiser dans une fenêtre à part * * * * * sh /home/api_monitor/monit.sh
J'ai deja localisé le problème, le screen est executé en /bin/sh à la place de /bin/bash
J'ai donc essayer d'executer /bin/bash avant d'executer la commande de lancement de mon serveur, mais la cette fois ci c'est la commande qui n'est pas reconnue
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 sh-4.2# api sh: api: command not found sh-4.2#
Vous avez tous les détails ! SI vous avez besoin de plus n’hésitez pas a demander.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 root@ks******:~# api /usr/bin/env: node: No such file or directory
Je vous remercie d'avance !
Partager