Где поставить системные cronjobs?

11

Если мне нужен cronjob, работающий на системном уровне (то есть не специфичный для определенного пользователя), как вы предлагаете мне его создать?

  1. работает crontab -eкак корень
  2. добавив его в /etc/crontab
  3. создание файла, определяющего cronjob в /etc/cron.d/
  4. создание файла, определяющего cronjob /etc/cron.*ly/(но только если такой интервал времени соответствует моим потребностям)

Что меня больше всего беспокоит: какое из этих решений может быть перезаписано обновлением системы ?

Кроме того, я полагаю, что если работа долгая, я должен поместить ее в отдельный файл сценария , например, в /root/bin/. Вы согласны?

голубоватый
источник
3
Вы должны указать, какой дистрибутив Unix или Linux вы используете.
Jlliagre
Я только учусь сейчас :) Я думал, что это было независимое от дистрибутивов поведение ...
голубоватое

Ответы:

13

Не использовать crontab -e

Я бы не поставил это crontab -eкак root. Это, как правило, менее очевидно для других администраторов и может потеряться со временем. Помещая их, /etc/crontabвы можете точно указать время, которое вы хотите, чтобы они выполнялись, а также вы можете указать другого пользователя.

Альтернативные локации

Если вам не нужно запускать сценарий от имени другого пользователя и / или вы просто хотите, чтобы сценарий запускался еженедельно, ежедневно и т. Д., То в нескольких дистрибутивах есть каталоги, в которые можно поместить сценарии, которые будут автоматически обрабатываться в определенное время.

Например, в дистрибутивах на основе Redhat:

$ ls -dl /etc/cron*
drwxr-xr-x. 2 root root 4096 Nov 29 11:06 /etc/cron.d
drwxr-xr-x. 2 root root 4096 Nov 29 11:06 /etc/cron.daily
-rw-------. 1 root root    0 Nov 23 07:42 /etc/cron.deny
drwxr-xr-x. 2 root root 4096 Nov 29 11:03 /etc/cron.hourly
drwxr-xr-x. 2 root root 4096 Nov 29 11:06 /etc/cron.monthly
-rw-r--r--. 1 root root  457 Sep 26  2011 /etc/crontab
drwxr-xr-x. 2 root root 4096 Sep 26  2011 /etc/cron.weekly

Я часто раз поставил crons на уровне системы , что я хочу работать в то время , определенной в /etc/cron.dвместо /etc/crontab, особенно , если они более сложные сценарии.

Я предпочитаю использовать каталоги, /etc/cron*потому что они гораздо более очевидные места, которые другие системные администраторы будут знать, и файлами здесь можно управлять с помощью установок пакетов, таких как rpmи / или apt.

Защита записей

Любые из упомянутых мной каталогов предназначены для размещения сценариев, которые не будут уничтожены менеджером пакетов. Если вы беспокоитесь о защите записи в crontab, то я бы определенно не поместил ее в /etc/crontabфайл, а вместо этого поместил бы ее как правильный скрипт в один из /etc/cron*каталогов.

SLM
источник
1

Я бы выбрал № 4. Это позволяет системным настройкам выбирать, когда запускать задание, и обычно они хорошо справляются со своей задачей «запускать, когда не занят». Изменение системного планировщика cron также автоматически влияет на время выполнения скрипта.

Недостатком является то, что у вас нет прямого контроля, когда он работает. Если вам нужно больше прямого контроля, тогда используйте # 1.

1 реже всего будет перезаписано обновлением системы. Хотя 3 и 4 должны быть довольно безопасными. все зависит от того, как вы обновляете. Ваш дистрибутив может обновляться как угодно, но только 2, как правило, могут быть перезаписаны.

Наконец, я бы поместил скрипты в / usr / local / bin. Это «нормальное» место, куда я помещаю общесистемные вещи, которыми не управляет менеджер пакетов дистрибутива. / root / bin также допустим, если он будет запускаться только пользователем root. Однако это все в основном вкус.

coteyr
источник
0

Любое из вышеперечисленного будет работать, и ни одно из вышеперечисленного не должно быть перезаписано обновлениями. Фактический выбор сводится к мнению - у любых трех разных людей часто будет по крайней мере два, если не три разных ответа.

Джон
источник