Чи можна використовувати змінні в 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 = qwerty
* * * * * echo $ FOO> ~ / out

І перевірте файл ~/out(оновлюється щохвилини), він повинен містити "qwerty".


2
+1, щоб показати, як ОП могла самостійно розбирати подібні речі.
Arthaey

Кращим прикладом буде використання $ FOO всередині цільового сценарію.
Acumenus

4

Незважаючи на те, що crontabs Linux підтримує визначення деяких змінних, що містять буквальні значення, окрім конденсації довгого тексту для більш короткого подання чи контролю деяких речей щодо самого 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.