Могу ли я сказать:
MYPATH=/root/scripts
MYSCRIPT=doit.sh
0 1 * * * $MYPATH/$MYSCRIPT
в crontab -e
?
Можно ли использовать переменные в crontab -e
?
Да, вы можете определить и использовать переменные таким образом. Есть ограничение (которое вы не затронули в своих примерах): строка справа от =
знака интерпретируется буквально, с удалением пробелов, поэтому вы не можете использовать такие конструкции, как FOO=$BAR/qux
(например PATH=$HOME/bin:$PATH
, ничего полезного не сделаете).
Это указано в документации, которую вы можете увидеть, запустив
man 5 crontab
(Обратите внимание , что man crontab
показана документация по crontab
команде , в разделе 1 руководство, вы хотите документацию crontab
формата файла , в разделе 5)
Только что попробовал, да, это возможно. Вы можете понять это на следующем простом примере crontab
:
FOO = БУКВЫ * * * * * echo $ FOO> ~ / out
И проверьте файл ~/out
(обновляется каждую минуту), он должен содержать "qwerty"
.
В то время как Linux crontabs поддерживает определение некоторых переменных, которые содержат литеральные значения, он не очень полезен, кроме сжатия длинного текста в более короткое представление или управления некоторыми вещами о самом cron, например, куда отправлять вывод по электронной почте.
Гибкость заключается в понимании того, что командная часть записи cron будет передана
/bin/sh -c
или оболочка, определеннаяSHELL
в системах, использующих Vixie cron (та, которая обычно устанавливается в системах Linux). Это означает, что оставшаяся часть командной строки представляет собой простой сценарий оболочки. ПРИМЕЧАНИЕ: понять, какая оболочка используется. В Linux ,/bin/sh
как правило ,/bin/bash
таким образом ,$( ... )
внедренная команда работает, но не на старых системах , где/bin/sh
только понимает`
вместо этого.Например, у меня есть простая строка crontab, которая ежемесячно архивирует файл MBX сохраненных сообщений и сжимает его. Это выглядит так:
Это будет выполняться первое число каждого месяца в 12:15, установить новое имя файла с CCYYMM, переместить текущий файл на новое имя и сжать его.
%
Следует помнить, что неэкранированный (знак процента) будет рассматриваться как символ новой строки, а данные, следующие за ним, будут отправляться как stdin для команды, предшествующей знаку процента. Вот почему нормальноеdate +Y+m
написано, какdate +\%Y\%m
указано выше.источник
Нет, вы не можете cronjob может содержать только элементы cron. Разве это не возможность создать bash-скрипт и запустить bash-скрипт через cronjob?
источник