X11 и pygame в Crontab

Вчера я столкнулся с аналогичной проблемой, но моя проблема заключалась в настройке пути для журнала ошибок в файле my.cnf. Я привык использовать log-error=/var/log/mysql/mysql.err(, который отлично работает в другой среде докера, отличной от -), но при использовании в докере я понял, что он не принимает расширение .err. Затем я использовал расширение .log, и оно работало нормально. Хотя я запускаю базовый образ докера mariadb:10.2, он должен быть таким же при запуске образа mysql:5.7. К вашему сведению :, хотя файл ошибок является журналом, на него не влияет переменная log-output=TABLE, так как его нельзя просмотреть в таблице mysql. Я также думаю, что регистрация в TABLEсоздает ненужную нагрузку на сервер, и этого следует избегать, если это возможно.

0
03.04.2019, 17:22
1 ответ

Если ваш скрипт запускается из командной строки, а не из cron, есть два обычных подозреваемых:

  1. PATH для cronотличается от вашего пути в качестве «обычного» пользователя. Вы можете решить эту проблему, используя спецификацию полного пути для вашего скрипта :
  2. .
@reboot python3 /full/path/to/myscript.py 
  1. cronне знает о состоянии каких-либо служб при запуске. Для cron@rebootозначает, когда запускается cron, а не когда сеть работает или какие-либо другие службы, которые могут потребоваться для вашего задания cron. Один из способов позаботиться об этом — sleepнемного перед запуском скрипта:
@reboot (sleep 30; python3 /full/path/to/myscript.py)  

Это задержит выполнение вашего скрипта на 30 секунд. Ничего волшебного в 30 секундах... это зависит от вашей системы. Вы можете провести несколько проб и ошибок, чтобы найти надежное время сна.

Обратите внимание, что другим подходом, позволяющим избежать недостатков cronв отношении состояния системных служб, является использование systemd. Некоторые (, в том числе и я, )находят cronболее простым в использовании, но, безусловно, systemdимеет некоторые преимущества.

Наконец, обычно рекомендуется собирать все сообщения об ошибках, сгенерированные при запуске скрипта. Еще одно дополнение к единственной строке в вашем crontabсделает это:

@reboot (sleep 30; python3 /full/path/to/myscript.py >> /home/yours/cronjoblog) 2>&1

Любые сообщения об ошибках из stderrбудут добавляться к указанному вами файлу.

1
28.04.2021, 23:35

Теги

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