сценарий оболочки не запускается правильно в cron [дубликат]

Возможный дубликат:
сценарий оболочки не запускается правильно в cron

Я хочу вызвать сценарий оболочки, который я написал из cron. В сценарии оболочки используется программа Linkchecker. Если я запускаю сценарий оболочки из терминала, он работает нормально. Однако при запуске cron я получаю следующие ошибки:

Файл "/Users/keith/etc/cron/linkchecker", строка 40, в from linkcheck.director import console, check_urls, get_aggregate
Файл "/opt/local/lib/python2.5/site-packages/linkcheck/director/init.py", строка 25, in from . import aggregator, console Файл "/opt/local/lib/python2.5/site-packages/linkcheck/director/aggregator.py", строка 25, в from . import logger, status, checker, cleanup Файл "/opt/local/lib/python2.5/site-packages/linkcheck/director/status.py", строка 20, in from . import task Файл "/opt/local/lib/python2.5/site-packages/linkcheck/director/task.py", строка 20, in from . import console Файл "/opt/local/lib/python2.5/site-packages/linkcheck/director/console.py", строка 27, in stderr = codecs.getwriter(i18n.default_encoding)(sys.stderr, errors="ignore") Файл "/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/codecs.py", строка 930, в getwriter return lookup(encoding).streamwriter LookupError: неизвестная кодировка: Traceback (most recent call last):
Файл "/Users/keith/etc/cron/linkchecker", строка 40, в from linkcheck.director import console, check_urls, get_aggregate
Файл "/opt/local/lib/python2.5/site-packages/linkcheck/director/init.py", строка 25, in from . import aggregator, console Файл "/opt/local/lib/python2.5/site-packages/linkcheck/director/aggregator.py", строка 25, в from . import logger, status, checker, cleanup Файл "/opt/local/lib/python2.5/site-packages/linkcheck/director/status.py", строка 20, in from . import task Файл "/opt/local/lib/python2.5/site-packages/linkcheck/director/task.py", строка 20, in from . import console Файл "/opt/local/lib/python2.5/site-packages/linkcheck/director/console.py", строка 27, in stderr = codecs.getwriter(i18n.default_encoding)(sys.stderr, errors="ignore") Файл "/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/codecs.py", строка 930, в getwriter return lookup(encoding).streamwriter LookupError: неизвестная кодировка: Traceback (most recent call last):
Файл "/Users/keith/etc/cron/linkchecker", строка 40, в from linkcheck.director import console, check_urls, get_aggregate
Файл "/opt/local/lib/python2.5/site-packages/linkcheck/director/init.py", строка 25, in from . import aggregator, console Файл "/opt/local/lib/python2.5/site-packages/linkcheck/director/aggregator.py", строка 25, в from . import logger, status, checker, cleanup Файл "/opt/local/lib/python2.5/site-packages/linkcheck/director/status.py", строка 20, in from . import task Файл "/opt/local/lib/python2.5/site-packages/linkcheck/director/task.py", строка 20, in from . import console Файл "/opt/local/lib/python2.5/site-packages/linkcheck/director/console.py", строка 27, in stderr = codecs.getwriter(i18n.default_encoding)(sys.stderr, errors="ignore") Файл "/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/codecs.py", строка 930, в getwriter return lookup(encoding).streamwriter LookupError: неизвестная кодировка: Traceback (most recent call last):
Файл "/Users/keith/etc/cron/linkchecker", строка 40, в from linkcheck.director import console, check_urls, get_aggregate
Файл "/opt/local/lib/python2.5/site-packages/linkcheck/director/init.py", строка 25, in from . import aggregator, console Файл "/opt/local/lib/python2.5/site-packages/linkcheck/director/aggregator.py", строка 25, в from . import logger, status, checker, cleanup Файл "/opt/local/lib/python2.5/site-packages/linkcheck/director/status.py", строка 20, in from . import task Файл "/opt/local/lib/python2.5/site-packages/linkcheck/director/task.py", строка 20, in from . import console Файл "/opt/local/lib/python2.5/site-packages/linkcheck/director/console.py", строка 27, in stderr = codecs.getwriter(i18n.default_encoding)(sys.stderr, errors="ignore") Файл "/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/codecs.py", строка 930, в getwriter return lookup(encoding).streamwriter LookupError: неизвестная кодировка: Traceback (most recent call last):
Файл "/Users/keith/etc/cron/linkchecker", строка 40, в from linkcheck.director import console, check_urls, get_aggregate
Файл "/opt/local/lib/python2.5/site-packages/linkcheck/director/init.py", строка 25, in from . import aggregator, console Файл "/opt/local/lib/python2.5/site-packages/linkcheck/director/aggregator.py", строка 25, в from . import logger, status, checker, cleanup Файл "/opt/local/lib/python2.5/site-packages/linkcheck/director/status.py", строка 20, in from . import task Файл "/opt/local/lib/python2.5/site-packages/linkcheck/director/task.py", строка 20, in from . import console Файл "/opt/local/lib/python2.5/site-packages/linkcheck/director/console.py", строка 27, in stderr = codecs.getwriter(i18n.default_encoding)(sys.stderr, errors="ignore") Файл "/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/codecs.py", строка 930, в getwriter return lookup(encoding).streamwriter LookupError: неизвестная кодировка: Traceback (most recent call last):
Файл "/Users/keith/etc/cron/linkchecker", строка 40, в from linkcheck.director import console, check_urls, get_aggregate
Файл "/opt/local/lib/python2.5/site-packages/linkcheck/director/init.py", строка 25, in from . import aggregator, console Файл "/opt/local/lib/python2.5/site-packages/linkcheck/director/aggregator.py", строка 25, в from . import logger, status, checker, cleanup Файл "/opt/local/lib/python2.5/site-packages/linkcheck/director/status.py", строка 20, in from . import task Файл "/opt/local/lib/python2.5/site-packages/linkcheck/director/task.py", строка 20, in from . import console Файл "/opt/local/lib/python2.5/site-packages/linkcheck/director/console.py", строка 27, in stderr = codecs.getwriter(i18n.default_encoding)(sys.stderr, errors="ignore") Файл "/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/codecs.py", строка 930, в getwriter return lookup(encoding).streamwriter LookupError: unknown encoding:

У меня chmod 777 для файла linkchecker. Я переместил файл linkchecker в мой текущий домашний каталог. Я добавил cron, сказав

crontab -e

Я поставил

38       12      *       *       5      /Users/keith/etc/cron/linkchecker.sh

Первая строка моего сценария оболочки - #!/bin/sh

Итак, единственное, о чем я могу думать, это то, что мне не хватает некоторых переменных окружения при запуске cron. Когда я добавляю env в верхней части моего скрипта и сравниваю переменные при запуске cron и в терминале, есть разница. Согласно https://stackoverflow.com/questions/1694942/environment-variable-used-in-shell-script-appear-blank-in-log-file-when-run-by-cr я могу добавить . /etc/profile и это должно добавить правильные переменные окружения. Похоже, что это не всасывает переменные, потому что переменные остаются теми же, когда я использую env.

Я работаю на Mac, если это имеет значение. Также я вставил рабочие переменные в верхней части моего скрипта, которые работали при запуске из терминала, а cron все еще не работал.

0
задан 23 May 2017 в 15:41
1 ответ

Попробуйте это

38 12 * * 5 /bin/bash -l -c /Users/keith/etc/cron/linkchecker.sh

-l опция получит среду входа в систему для выполнения сценария.

1
ответ дан 4 December 2019 в 22:13

Теги

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