Назад | Перейти на главную страницу

В чем преимущество использования сценария bash для заданий cron?

Насколько я понимаю, вы можете написать своих крон, отредактировав

crontab -e

Я нашел несколько источников, которые вместо написания строки задания за строкой ссылаются на сценарий bash в задании cron.

Единственное преимущество, что вы можете объединить множество задач в одно задание cron с помощью сценария bash?


Дополнительный вопрос для новичков: Правка crontab -e правильно относится к одному файлу? Я заметил, что если я открою crontab -e и закрою без редактирования, когда я снова открою файл, появится другое числовое расширение, например:

"/tmp/crontab.XXXXk1DEaM" 0L, 0C

Я, хотя crontab хранится в / var / spool / cron или / etc / crontab ??

Зачем ему хранить cron в папке tmp?

Это зависит от того, что вы делаете с работой.

cron не дает вам реальной среды сценариев, поэтому, если вы делаете что-то более сложное, чем простой вызов пары команд, вы, вероятно, захотите использовать cron для вызова сценария. Вы также можете иметь дело с такими вещами, как расширение переменных в скрипте, что может быть сложно, если вообще возможно, сделать в среде cron.

Временный файл, который вы видите при запуске crontab -e это просто временный файл, который будет очищен после выхода из сеанса редактора. Фактические crontab, которые вы редактируете с помощью этого метода, попадают в / var / spool / cron.

На самом деле, поскольку это относительно простые вопросы, относящиеся к Unix, есть unix.stackexchange.com сторона вещей, которая может быть более полезной.

Итак, для первого вопроса: есть несколько причин использовать bash-скрипт для вашего cronjob:

Как вы упомянули, вы можете объединить множество команд в один сценарий bash. Это намного удобнее, чем просто собрать вместе огромную строку crontab, тем более, что логический поток более очевиден. Сравните:

command1 >/tmp/foo && command2 || command3

vs.

if command1 >/tmp/foo
then
  command2
else
  command3
fi

Еще одна причина для вызова скрипта в вашем crontab - это то, что вы можете вызывать что-то помимо bash. Например, вы можете вызвать сценарий Perl или даже сценарий php.

Также предположим, что у вас есть какая-то логика, которую вы хотите вызвать вне cron. Затем также имеет смысл поместить эту логику в отдельный сценарий, установленный на вашем сервере. Вы можете запускать этот сценарий по мере необходимости в командной строке, а также можете вызывать его из crontab.

Наконец, обратите внимание, что цитирование в crontabs действительно странно. Канонический пример: crontab съедают знак процента. Если вы поместите «%» в строку crontab, вам фактически придется удвоить его («%%»), иначе cron съест голый знак процента и запутает вас.

По сути, упаковка cronjob в скрипт более безопасна (более стандартные кавычки / экранирование) и более гибкая. Любое задание cron, длина которого превышает одну или две команды, вероятно, следует вынести в отдельный сценарий.

Второй вопрос довольно прост: когда вы редактируете свой crontab, вы не редактируете файл в / var / spool напрямую. Вместо этого crontab -e команда копирует ваш файл crontab во временный файл в / tmp. Часть имени временного файла представляет собой случайную строку, предназначенную для уменьшения вероятности двух вызовов crontab -e от попытки редактировать тот же файл в / tmp.

Временный файл безопаснее редактировать по разным причинам. Во-первых, в случае сбоя процесса редактирования исходный файл остается нетронутым и пригодным для использования. Во-вторых, это позволяет системе проверять новый crontab на наличие синтаксических ошибок перед заменой старого.

Также я буду удивлен, если мне удастся напечатать всю эту запись, ни разу не сказав кукурузную задницу.