Чи можу я сказати:
MYPATH=/root/scripts
MYSCRIPT=doit.sh
0 1 * * * $MYPATH/$MYSCRIPT
в crontab -e
?
Чи можливо використовувати змінні в crontab -e
?
Чи можу я сказати:
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 = qwerty * * * * * echo $ FOO> ~ / out
І перевірте файл ~/out
(оновлюється щохвилини), він повинен містити "qwerty"
.
Незважаючи на те, що 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
вище.
Ні, ви не можете cronjob може містити тільки елементи cron. Хіба це не варіант створити bash-скрипт і запустити bash-скрипт через cronjob?