Crontab и тестирование команды для выполнения

Я совсем новичок в cron и crontab.

Я отредактировал файл crontab, и мне нужно вручную выполнить одну из команд, чтобы я мог попробовать и протестировать ее заранее. Как мне это сделать? Если не получается, есть ли режим, который показывает ошибки?


person user638009    schedule 17.05.2011    source источник


Ответы (2)


  1. Напишите сценарий оболочки, который вы можете протестировать.
  2. Выполните этот сценарий оболочки из crontab.
  3. Помните, что cron практически не предоставляет никакой среды, поэтому ваш сценарий может исправить это. В частности, ваш профиль не будет использоваться.
  4. Не увлекайтесь тем, что вы помещаете в crontab.
  5. Создайте режим отладки в сценарии оболочки.

Нет, специально режима, который показывает ошибки, нет. Обычно, если задание cron не выполняется, вывод отправляется вам по электронной почте. То есть он отправляет вам стандартный вывод и стандартную информацию об ошибке, если выполняемая команда записывает что-либо либо в стандартный вывод, либо в стандартную ошибку.

В MacOS X (10.6.7) среда, которую я получил, была (через запись crontab, например 12 37 17 5 * env >/tmp/cron.env):

SHELL=/bin/sh
USER=jleffler
PATH=/usr/bin:/bin
PWD=/Users/jleffler
SHLVL=1
HOME=/Users/jleffler
LOGNAME=jleffler
_=/usr/bin/env

Из них PWD, _ и SHLVL обрабатываются оболочкой. Итак, чтобы надежно протестировать ваш скрипт в cron-подобной среде, используйте:

(cd $HOME
 env -i \
    SHELL=/bin/sh \
    USER=$USER \
    PATH=/usr/bin:/bin \
    HOME=$HOME \
    LOGNAME=$LOGNAME \
    /path/to/script/you/execute ...
)

Параметр -i для env означает «игнорировать всю унаследованную среду»; сценарий увидит ровно пять указанных значений плюс все, что оболочка укажет автоматически. Без аргументов env сообщает об окружающей среде; с аргументами он настраивает среду и выполняет команду.

person Jonathan Leffler    schedule 17.05.2011

Чтобы выполнить скрипт «вручную», вам сначала нужно сделать его исполняемым, выполнив:

$ chmod +x yourScriptName

Тогда сделайте либо

$ ./yourScriptName

если вы выполните его с его пути или

$ /full/path/to/yourScriptName

отовсюду.

person ripat    schedule 17.05.2011