8

Могу ли я сказать:

MYPATH=/root/scripts  
MYSCRIPT=doit.sh

0 1 * * * $MYPATH/$MYSCRIPT

в crontab -e?

Можно ли использовать переменные в crontab -e?

4 ответа4

10

Да, вы можете определить и использовать переменные таким образом. Есть ограничение (которое вы не использовали в своих примерах): строка справа от знака = интерпретируется буквально, с удалением пробелов, поэтому вы не можете использовать конструкции типа FOO=$BAR/qux (например, PATH=$HOME/bin:$PATH ничего полезного не сделает).

Это указано в документации, которую вы можете увидеть, запустив

man 5 crontab

(Обратите внимание , что man crontab показывает документацию crontab команды, в разделе 1 настоящего руководства, вы хотите документацию формата crontab файла, в разделе 5.)

6

Только что попробовал, да, это возможно. Вы можете понять это с помощью этого простого примера, поместив это в ваш crontab:

FOO=qwerty
* * * * * echo $FOO > ~/out

И проверьте файл ~/out (обновляется каждую минуту), он должен содержать "qwerty" .

4

В то время как Linux crontabs поддерживает определение некоторых переменных, которые содержат литеральные значения, он не очень полезен, кроме сжатия длинного текста в более короткое представление или управления некоторыми вещами о самом cron, например, куда отправлять вывод по электронной почте.

Гибкость заключается в понимании того, что командная часть записи cron будет передана в /bin/sh -c или оболочку, определенную с помощью SHELL в системах, использующих Vixie cron (та, которая обычно устанавливается в системах Linux). Это означает, что оставшаяся часть командной строки представляет собой простой сценарий оболочки. ПРИМЕЧАНИЕ: понять, какая оболочка используется. В Linux /bin/sh обычно является /bin/bash поэтому встроенная команда $( ... ) работает, но не в старых системах, где /bin/sh понимает только ` .

Например, у меня есть простая строка crontab, которая ежемесячно архивирует файл MBX сохраненных сообщений и сжимает его. Это выглядит так:

15 0 1 * *  nf=MailFeed-$( date +\%Y\%m ).mbx && cd Logs && mv MailFeed.mbx $nf && bzip2 -9 $nf

Это будет выполняться первое число каждого месяца в 12:15, установить новое имя файла с CCYYMM, переместить текущий файл на новое имя и сжать его. Следует помнить, что неэкранированный % (знак процента) будет рассматриваться как символ новой строки, а данные, следующие за ним, будут отправляться как stdin команде, предшествующей знаку процента. Вот почему обычная date +Y+m записывается как date +\%Y\%m выше.

-2

Нет, вы не можете cronjob может содержать только элементы cron. Разве не возможно создать bash-скрипт и запустить bash-скрипт через cronjob?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .