У меня есть этот робот worker.py, который я просто запускаю как:
python worker.py --details
С этим роботом много проблем, поэтому он продолжает снижаться каждые 30 минут.
] Когда робот работает, ps aux | grep worker.py дает мне вывод:
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
Итак, я установил мой cron для работы каждые 10 минут с помощью этой команды:
cd /path/to/boot && if [ 2 -gt `ps aux | grep worker.py | wc -l` ]; then python worker.py --detail &> /dev/null ; fi
проблема:
Если я просто запускаю команду выше прямо в командной строке, она отлично работает (если робот работает, ничего не происходит, если робот не работает, он снова встает). Когда cron запускает команду, он создает новый процесс каждые 10 минут (борясь с моей базой данных), потому что он не видит текущий процесс, я полагаю. *Все выше сделано как root, Я думаю, что речь идет не о проблемах пользователя.
Спасибо
cron не может найти процесс с ps aux, ps COLUMNS по умолчанию - 80. ie вывод команды ps усечен до 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
Добавить столбцы в начало crontab, начиная как ниже, и это исправит проблему.
crontab ниже:
SHELL=/bin/bash
COLUMNS=160
37 08 * * * /home/admin/MyPython/test.py >> /home/admin/MyPhon/test.py.log 2>&1 &
test.py содержит ниже:
cmd1="ps -aef >> /home/admin/MyPython/test_ps.txt; echo COLUMNS: ${COLUMNS} ${Shell}>> /home/admin/MyPython/test_ps.txt;"
print cmd1
os.system(cmd1)
Надеюсь, он ответит. [ ! d4]