Чи можу я сказати:
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?