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.

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
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.

Par contre, lorsque j'inscrit l'execution au crontab

Code : Sélectionner tout - Visualiser dans une fenêtre à part
*      *       *       *       *  sh /home/api_monitor/monit.sh
le screen est bien coupé, puis relancé, mais par contre la commande dans le screen n'est pas reconnue.
J'ai deja localisé le problème, le screen est executé en /bin/sh à la place de /bin/bash
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#
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
 
root@ks******:~# api
/usr/bin/env: node: No such file or directory
Vous avez tous les détails ! SI vous avez besoin de plus n’hésitez pas a demander.

Je vous remercie d'avance !