ps внутри crontab не видит запущенный процесс

У меня есть этот робот 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

Итак, я установил свой хрон для работы каждые 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, так что, я полагаю, речь идет не о проблемах пользователей.

Спасибо

4
задан 22 June 2016 в 03:23

2 ответа

То, в чем Вы нуждаетесь, является файлом блокировки и проверкой на этот файл блокировки. Если это - там конец, сценарий иначе запускает его.

команда в качестве примера была бы халтура .

ОПИСАНИЕ

Shlock пытается создать файл блокировки, названный именем и записать идентификационный pid процесса в него. Если файл уже будет существовать, то халтура прочитает идентификатор процесса из файла и протестирует, чтобы видеть, работает ли процесс в настоящее время. Если процесс будет существовать, то файл не будет создан. Shlock выходит с нулевым состоянием, если он смог создать файл блокировки, или ненулевой, если файл относится к в настоящее время активному процессу.

0
ответ дан 22 June 2016 в 03:23

крон не может найти процесс с PS aux, значение по умолчанию СТОЛБЦОВ PS равняется 80. т.е. вывод команды PS является усеченным к 80 СТОЛБЦАМ.

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)

, Надо надеяться, это отвечает.

0
ответ дан 22 June 2016 в 03:23
  • 1
    Да, у меня есть та строка также. upvote для повышения осведомленности. – Yurik 10 November 2017 в 09:58

Другие вопросы по тегам:

Похожие вопросы: