Взгляните на следующий простой сценарий оболочки startCleanup.sh
:
#!/bin/sh
screen -d -m -S cleaner /usr/bin/python3 /opt/cleanup.py
Мой crontab выглядит так:
* * * * * /opt/startCleanup.sh > /opt/cleanup.log 2>&1
Когда я запускаю этот сценарий в оболочке как обычный пользователь, у меня не возникает никаких проблем. Однако, если я запускаю это как обычное задание cron, экран не запускается. Или лучше сказать: экран запускается (я думаю), но когда сценарий завершается и вместе со сценарием экран также завершается.
Есть ли у кого-нибудь идеи, как решить эту проблему?
Спасибо :)
ОБНОВЛЕНИЕ: Хорошо, теперь я точно знаю, что экран работает правильно (я проверил это, добавив засыпание в конец сценария bash).
Итак, вот что происходит: экран создан. НО, когда сценарий bash завершает работу, экран также завершается. Итак, экран по-прежнему зависит от сценария.
Как я могу избежать отключения экрана после завершения скрипта?
действительно, использование screen здесь не имеет особого смысла. Но я проверил ваше решение на своей коробке, и оно отлично работает. Сеанс экрана запускается из скрипта, запущенного из cronjob, и я могу к нему присоединиться. Попробуйте несколько вещей:
вы пробовали что-то подобное вместо этого?
#!/bin/sh
screen -D -R cleaner /usr/bin/python3 /opt/cleanup.py
Эта комбинация параметров будет пытаться повторно подключиться к сеансу, если он существует, или создать, если он не существует, согласно странице руководства.
Кроме того, я не думаю, что какой-либо вывод будет перенаправлен в файл, кроме любых ошибок, возникающих при вызове screen.