Почему crontabs не хранятся в домашних каталогах пользователей?

35

Мне любопытно знать: почему crontabs хранятся в / var, а не в домашних каталогах пользователя? Делать эти файлы для обновлений очень сложно, но я подозреваю, что есть логическая причина ...

Мартин Ева
источник

Ответы:

41

Несколько причин, которые я могу придумать:

  • В корпоративной среде вы можете иметь тысячи пользователей. Если это так, cron должен будет сканировать каталог каждого пользователя каждую минуту, чтобы проверить файл crontab (был ли он создан, удален или изменен).
    Храня их в одном месте, вам не нужно делать это интенсивное сканирование.
  • Домашние каталоги могут быть не всегда доступны. Если домашние каталоги являются монтируемыми автоматическими, они могут не монтироваться. Если cron проверяет их каждую минуту, это приводит к их установке и предотвращает их демонтаж из-за неактивности. Кроме того, если домашний каталог зашифрован и расшифрован с помощью пароля пользователя, cron не сможет получить доступ к домашнему каталогу, если пользователь не вошел в систему и не расшифровал / не смонтировал его.
  • Домашние каталоги могут быть общими для всех хостов. Если домашний каталог является сетевым ресурсом, этот же домашний каталог будет отображаться на нескольких хостах. Но вы можете не захотеть, чтобы ваши задания cron запускались на каждом хосте, только на одном из них.
Патрик
источник
1
+1 Хотя традиционно cronэти файлы не сканируются каждую минуту; он загружал их один раз и перечитывал только по сигналу.
Златовласка
7
Но вы правы по поводу пункта № 3; согласно википедии, crontabs изначально находились в $ HOME, пока "[Bell lab devs] не включили Unix at command в cron, не переместили файлы crontab из домашних каталогов пользователей (которые не были специфичны для хоста) и в общий специфичный для хоста каталог спула ... "Это также, когда crontabкоманда была создана, которая могла иметь дело с проблемой перезагрузки.
Златовласка
2
@Patrick Или когда программа использует utimesсистемный вызов с аргументом пути к папке спула, чтобы установить mtime каталога, что и делает команда Vixie cron crontab.
Марк Плотник
2
Ранние версии cron, конечно, не воспринимали изменения в пользовательских файлах crontab, если они не были отредактированы с помощью crontab -e. Я был пойман этим в прошлом на Солярисе, смотрите страницу руководства
2
В Solaris 10, crontab -eкоторый имеет значение setuid root, пишет сообщение /etc/cron.d/FIFOпосле того, как пользователь отредактирует crontab.
Марк Плотник