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

сценарий оболочки неправильно работает в cron

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

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

Файл "/ Users / keith / etc / cron / linkchecker", строка 40, в консоли импорта linkcheck.director, check_urls, get_aggregate
Файл "/opt/local/lib/python2.5/site-packages/linkcheck/director/в этом.py ", строка 25, в from. import aggregator, файл консоли" /opt/local/lib/python2.5/site-packages/linkcheck/director/aggregator.py ", строка 25, in from. import logger, status , средство проверки, файл очистки "/opt/local/lib/python2.5/site-packages/linkcheck/director/status.py", строка 20, в из. Файл задачи импорта "/opt/local/lib/python2.5 /site-packages/linkcheck/director/task.py ", строка 20, в from. import console File" /opt/local/lib/python2.5/site-packages/linkcheck/director/console.py ", строка 27 в 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 (кодировка) .streamwriter LookupError: неизвестная кодировка: Traceback (последний вызов последним):
Файл "/ Users / keith / etc / cron / linkchecker", строка 40, в консоли импорта linkcheck.director, check_urls, get_aggregate
Файл "/opt/local/lib/python2.5/site-packages/linkcheck/director/в этом.py ", строка 25, в from. import aggregator, файл консоли" /opt/local/lib/python2.5/site-packages/linkcheck/director/aggregator.py ", строка 25, in from. import logger, status , средство проверки, файл очистки "/opt/local/lib/python2.5/site-packages/linkcheck/director/status.py", строка 20, в из. Файл задачи импорта "/opt/local/lib/python2.5 /site-packages/linkcheck/director/task.py ", строка 20, в from. import console File" /opt/local/lib/python2.5/site-packages/linkcheck/director/console.py ", строка 27 в 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 (кодировка) .streamwriter LookupError: неизвестная кодировка: Traceback (последний вызов последним):
Файл "/ Users / keith / etc / cron / linkchecker", строка 40, в консоли импорта linkcheck.director, check_urls, get_aggregate
Файл "/opt/local/lib/python2.5/site-packages/linkcheck/director/в этом.py ", строка 25, в from. import aggregator, файл консоли" /opt/local/lib/python2.5/site-packages/linkcheck/director/aggregator.py ", строка 25, in from. import logger, status , средство проверки, файл очистки "/opt/local/lib/python2.5/site-packages/linkcheck/director/status.py", строка 20, в из. Файл задачи импорта "/opt/local/lib/python2.5 /site-packages/linkcheck/director/task.py ", строка 20, в from. import console File" /opt/local/lib/python2.5/site-packages/linkcheck/director/console.py ", строка 27 в 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 (кодировка) .streamwriter LookupError: неизвестная кодировка: Traceback (последний вызов последним):
Файл "/ Users / keith / etc / cron / linkchecker", строка 40, в консоли импорта linkcheck.director, check_urls, get_aggregate
Файл "/opt/local/lib/python2.5/site-packages/linkcheck/director/в этом.py ", строка 25, в from. import aggregator, файл консоли" /opt/local/lib/python2.5/site-packages/linkcheck/director/aggregator.py ", строка 25, in from. import logger, status , средство проверки, файл очистки "/opt/local/lib/python2.5/site-packages/linkcheck/director/status.py", строка 20, в из. Файл задачи импорта "/opt/local/lib/python2.5 /site-packages/linkcheck/director/task.py ", строка 20, в from. import console File" /opt/local/lib/python2.5/site-packages/linkcheck/director/console.py ", строка 27 в 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 (кодировка) .streamwriter LookupError: неизвестная кодировка: Traceback (последний вызов последним):
Файл "/ Users / keith / etc / cron / linkchecker", строка 40, в консоли импорта linkcheck.director, check_urls, get_aggregate
Файл "/opt/local/lib/python2.5/site-packages/linkcheck/director/в этом.py ", строка 25, в from. import aggregator, файл консоли" /opt/local/lib/python2.5/site-packages/linkcheck/director/aggregator.py ", строка 25, in from. import logger, status , средство проверки, файл очистки "/opt/local/lib/python2.5/site-packages/linkcheck/director/status.py", строка 20, в из. Файл задачи импорта "/opt/local/lib/python2.5 /site-packages/linkcheck/director/task.py ", строка 20, в from. import console File" /opt/local/lib/python2.5/site-packages/linkcheck/director/console.py ", строка 27 в 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 (кодировка) .streamwriter LookupError: неизвестная кодировка: Traceback (последний вызов последним):
Файл "/ Users / keith / etc / cron / linkchecker", строка 40, в консоли импорта linkcheck.director, check_urls, get_aggregate
Файл "/opt/local/lib/python2.5/site-packages/linkcheck/director/в этом.py ", строка 25, в from. import aggregator, файл консоли" /opt/local/lib/python2.5/site-packages/linkcheck/director/aggregator.py ", строка 25, in from. import logger, status , средство проверки, файл очистки "/opt/local/lib/python2.5/site-packages/linkcheck/director/status.py", строка 20, в из. Файл задачи импорта "/opt/local/lib/python2.5 /site-packages/linkcheck/director/task.py ", строка 20, в файле консоли импорта" /opt/local/lib/python2.5/site-packages/linkcheck/director/console.py ", строка 27 в 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 (кодировка) .streamwriter LookupError: неизвестная кодировка:

У меня chmod 777 файл проверки ссылок. Я переместил файл проверки ссылок в свой текущий домашний каталог. Я добавил 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 по-прежнему не работал.

Попробуй это

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

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