Это - мой сценарий оболочки, который я хочу запланировать задание крона использования.
parser.sh
#!/bin/bash
source .profile
workon venv
cd /home/ashish/deployments/myproject
export DJANGO_SETTINGS_MODULE=myproject.settings_production
python /home/ashish/deployments/myproject/myproject/manage.py parse_data
Задание крона -
*/15 * * * * . /home/ashish/parser.sh
Каждый раз, когда этот крон прогоны задания я получаю почту с ошибками:
/bin/sh: 6: /home/ashish/parser.sh: source: not found
/bin/sh: 7: /home/ashish/parser.sh: workon: not found
Traceback (most recent call last):
File "/home/ashish/deployments/myproject/myproject/manage.py", line 8, in <module>
from django.core.management import execute_from_command_line
ImportError: No module named django.core.management
Когда я запускаю этот скрипт от терминала -
. parser.sh #this gives no error
sh parser.sh #this gives errors
/bin/sh: 6: /home/ashish/parser.sh: source: not found
/bin/sh: 7: /home/ashish/parser.sh: workon: not found
Какова может быть возможная ошибка в этом сценарии?
*/15 * * * * . /home/ashish/parser.sh
cron
использование sh
, не bash
, поэтому при определении источника сценария (это - то, что эти .
делает), это выполняется под sh
, не bash
. Удалите .
.
кроме того, PATH
для крона ограничен. Определите полные пути к командам, которые Вы используете, такой как workon
, или устанавливаете PATH
сами.
Для выполнения сценария как, он работает собственной учетной записи (с ударом), изменяют crontab на следующее:
*/15 * * * * sudo -u ashish /home/ashish/parser.sh
Это выполнит сценарий почти, как будто Вы выполнили его из командной строки на Вашей собственной учетной записи.