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


13

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

MYPATH=/root/scripts  
MYSCRIPT=doit.sh

0 1 * * * $MYPATH/$MYSCRIPT

в crontab -e?

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

Ответы:


15

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

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

man 5 crontab

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


7

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

FOO = БУКВЫ
* * * * * echo $ FOO> ~ / out

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


2
+1 к демонстрации того, как ОП может самостоятельно выяснить подобные вещи.
Arthaey

Лучшим примером будет использование $ FOO внутри целевого скрипта.
Acumenus

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?


1
Правда в некоторых других устройствах, но Linux cron поддерживает присваивание переменных среды.
Жиль "ТАК - перестать быть злым"
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.