Назад | Перейти на главную страницу

При запуске как cronjob мой сценарий оболочки не запускает экран

Взгляните на следующий простой сценарий оболочки 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, и я могу к нему присоединиться. Попробуйте несколько вещей:

  1. добавить полный путь к экрану в скрипте startCleanup.sh
  2. смотреть / var / log / cron, если задания вообще запускаются
  3. перенаправить вывод из / usr / bin / python3 /opt/cleanup.py в файл и проверить, нормально ли он работает при запуске через cron

вы пробовали что-то подобное вместо этого?

#!/bin/sh
screen -D -R cleaner /usr/bin/python3 /opt/cleanup.py

Эта комбинация параметров будет пытаться повторно подключиться к сеансу, если он существует, или создать, если он не существует, согласно странице руководства.

Кроме того, я не думаю, что какой-либо вывод будет перенаправлен в файл, кроме любых ошибок, возникающих при вызове screen.