cron queuing bash и скрипты python
В настоящее время я хочу понять и освоиться с очередями crontab на моем MacBook Pro. Недавно я решил проблему, из-за которой мой простой сценарий bash не выполнялся. Оказывается, мне пришлось переместить мой сценарий bash и его вывод в /Users/myusername/путь. Раньше у меня он был в /Users/myusername/Desktop/. Этот пост можно найти здесь -https://stackoverflow.com/questions/64110897/simple-bash-script-doesnt-cron-properly?noredirect=1#comment113370465_64110897
Мой вопрос: все ли мои сценарии bash и python /Users/myusernameвсегда должны размещаться в пути? Нет ли обходного пути?
Ответы
Вопрос:
Мой вопрос: все ли мои сценарии bash и python
/Users/myusernameвсегда должны размещаться в пути? Нет ли обходного пути?
Ответ:
Нет. Вы можете разместить свои сценарии bash и python где угодно. Однако есть дополнительные требования :
- Ваши
cronзадания выполняются в СРЕДЕ, отличной от того, когда вы их запускаете; напр$PATH. Следовательно, вы должны использовать спецификацию полного пути для указания ваших скриптов вcrontab; например, используйте:
* * * * * /opt/local/bin/python3 /some/dir/you/choose/myscript.py
- На моем Mac (Catalina) я счел необходимым предоставить привилегии «Полный доступ к диску»
cron. YMMV в другой версии ОС. Вот как:
System Preferences -> Security & Privacy -> Privacy вкладка:
- По крайней мере, при отладке вашей
cronработы вам следует подумать о перенаправлении любых сообщений об ошибках (stderr) в файл - в противном случае они окажутся/dev/nullбесполезными! Продолжая приведенный выше пример:
* * * * * /opt/local/bin/python3 /some/dir/you/choose/myscript.py >> /Home/<username>/MyCronLog.txt 2>&1
Возможно, вам просто нужно убедиться, что вы предоставляете разрешения для элементов и используете полные пути для всего. Тот факт, что скрипт запускается в интерактивной оболочке, не означает, что они верны в ограниченной оболочке.
Вот супер советы по отладке по недавнему вопросу.
- cron и "команда не найдена"
- cronjobs не запускаются
- Получение неизвестной командной ошибки при попытке запустить скрипт через cron