Можно ли использовать символические ссылки в /etc/cron.d/?

25

Я пытаюсь реализовать механизм конфигурации, который позволяет в определенном проекте развертывать через SVN конфигурации Cron.

Я сразу же подумал, что мне нужно вэрализовать символические ссылки из /etc/cron.d/ в файл cron моего проекта (который, в свою очередь, контролируется vcs), но это, похоже, не работает.

Я нашел несколько старых сообщений на форуме, в которых говорилось, что символические ссылки не поддерживаются, а другие говорят, что они есть. Что он?

Есть ли что-нибудь еще или какой-нибудь другой хороший способ достичь этого?

Луис Фейсера
источник

Ответы:

27

Согласно с man crond

ПРЕДОСТЕРЕЖЕНИЯ

Все файлы crontab должны быть обычными файлами или символическими ссылками на обычные файлы, они не должны быть исполняемыми или записываемыми для кого-либо, кроме владельца. Это требование может быть отменено с помощью параметра -p в командной строке crond. Если используется поддержка initify, изменения в символьных crontabs автоматически не замечаются демоном cron. Демон cron должен получить сигнал SIGHUP для перезагрузки crontabs. Это ограничение API inotify.

Вывод системного журнала будет использоваться вместо почты, когда sendmail не установлен.

Это раздражало и живое дерьмо из меня, Короче говоря, да, вы можете использовать символические ссылки, но если это не так, regular files or symlinks to a regular fileон должен использовать -pпереключатель.

кто я
источник
1
Вы также обнаружите, что файл должен принадлежать пользователю, для которого cron выполняет задания; например, если символическая ссылка /etc/cron.d/bobsjobуказывает на файл, принадлежащий пользователю «bob», cron завершится с сообщением системного журнала WRONG FILE OWNER (/etc/cron.d/bobsjob).
Крейг Рингер
@CraigRinger У меня есть пользователь с именем «www-data», владеющий файлом cron, в настоящее время я получаю ошибку WRONG FILE OWNER в системном журнале. Как я могу заставить Cron запускаться, используя пользователя "www-data". Я не хочу делать root владельцем файла.
CMCDragonkai
@CMCDragonkai sudo -u www-data crontab -eи добавьте его в crontab пользователя www-data. Затем он будет работать от имени пользователя www-data. Не забудьте удалить явный пользовательский столбец, так как он не существует в пользовательских crontabs.
Крейг Рингер
Поместит ли это файл внутрь etc/cron.? У меня сложилось впечатление, что инструмент crontab поместит задачу в другое место.
CMCDragonkai
@CMCDragonkai Вы правы, crontab -eв данном случае вам не нужно звонить . Я смотрю, но не нашел способ запустить пользовательский crontab как пользователь без полномочий root.
ACK_stoverflow
14

Это имеет значение для безопасности. Сценарии в /etc/cron.d/ запускаются пользователем root с правами root. Это плохая идея - использовать там сценарии символических ссылок, которые принадлежат и доступны для записи пользователям без полномочий root, поскольку ваша система может быть скомпрометирована таким образом.

Флориан Хайнле
источник
4

Я бы проверил man-страницу cron для вашей версии Ubuntu (я полагаю, мы говорим об Ubuntu на этом форуме!):

Файлы в этом каталоге должны принадлежать пользователю root, не обязательно должны быть исполняемыми (они являются файлами конфигурации, такими как / etc / crontab) и должны соответствовать тому же соглашению об именах, которое используется run-parts (8): они должны состоят только из прописных и строчных букв, цифр, подчеркиваний и дефисов. Это означает, что они не могут содержать никаких точек.

Как указывает Флориан, если этот файл доступен для записи пользователям без полномочий root, это дыра в безопасности, потому что задания будут выполняться пользователем root (для тех, кто назван в качестве владельца задания в файле). Также обратите внимание, что

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

т.е. введите имя пользователя перед командой для запуска.

накипь
источник
1
Это означает, что они не могут содержать никаких точек. обратите на это внимание. У меня была точка в названии ссылки. Это был виновник моей неработающей работы для меня. Плюс: сам файл ДОЛЖЕН заканчиваться CRLF
доктор Джанлуиджи Зейн Дзанеттини