J'ai ce robot worker.py
, que je lance juste comme:
python worker.py --details
Il y a beaucoup de problèmes autour de ce robot, donc il continue à descendre toutes les 30 minutes.
Lorsque le robot est en cours d'exécution, ps aux | grep worker.py
me donne un résultat:
root 3870 6.2 11.7 997960 59052 pts/0 Sl 10:47 0:32 python worker.py --details
root 4030 0.0 0.4 9752 2312 pts/0 S+ 10:55 0:00 grep --color=auto worker
Donc, je règle mon cron pour exécuter chaque 10 minutes avec cette commande:
cd /path/to/boot && if [ 2 -gt `ps aux | grep worker.py | wc -l` ]; then python worker.py --detail &> /dev/null ; fi
Le problème est:
Tout ce qui précède est créé en tant que racine, je suppose donc qu'il ne s'agit pas de problèmes d'utilisateurs.
Merci
Ce dont vous avez besoin est un fichier de verrouillage et recherchez ce fichier de verrouillage. Si c'est le cas, terminez le script sinon lancez-le.
Un exemple de commande serait shlock .
LA DESCRIPTION
Shlock tente de créer un fichier de verrouillage nommé nom et d'y écrire le pid d'ID de processus. Si le fichier existe déjà, shlock lit l'ID de processus à partir du fichier et teste si le processus est en cours d'exécution. Si le processus existe, le fichier ne sera pas créé. Shlock se termine avec un statut nul s'il est capable de créer le fichier de verrouillage, ou différent de zéro si le fichier fait référence à un processus actuellement actif.
cron ne peut pas trouver le processus avec ps aux, la valeur par défaut de ps COLUMNS est 80. Par exemple, la sortie de la commande ps est tronquée à 80 COLUMNS.
ps -aef before column set:
admin 28695 1 0 08:37 ? 00:00:00 /usr/bin/python /home/admin/MyP
ps -aef after column set:
admin 28695 1 0 08:37 ? 00:00:00 /usr/bin/python /home/admin/MyPython/test.py
Ajoutez les colonnes à la crontab en commençant comme ci-dessous et cela résoudra le problème.
crontab avec ci-dessous:
Shell=/bin/bash
COLUMNS=160
37 08 * * * /home/admin/MyPython/test.py >> /home/admin/MyPhon/test.py.log 2>&1 &
test.py contient ci-dessous:
cmd1="ps -aef >> /home/admin/MyPython/test_ps.txt; echo COLUMNS: ${COLUMNS} ${Shell}>> /home/admin/MyPython/test_ps.txt;"
print cmd1
os.system(cmd1)
J'espère que ça répond.