Crontab ніколи не працює під час /etc/cron.d


32

Ось що я зробив з Debian Jessie:

  • встановити cron через apt-get install cron
  • помістити backup_crontabфайл/etc/cron.d/

Однак завдання ніколи не виконується.

Ось кілька результатів:

/# crontab -l
no crontab for root

/# cd /etc/cron.d && ls
backup_crontab

/etc/cron.d# cat backup_crontab
0,15,30,45 * * * * /backup.sh >/dev/null 2>&1

Чи потрібно щось зробити, щоб активувати певний crontab або активувати "службу" cron саме по собі?


4
Що робити, якщо він працює і не працює з помилкою, яку ви не побачите, тому що перенаправляєте весь вихід на / dev / null? :)
тинк

@tink Чи можна замість цього додати вихід до кінця файлу?
Jivan

2
впевнений, є; 0,15,30,45 * * * * /backup.sh >> / tmp / testing_cron.out 2> & 1
тинк

@Jivan, лише невелика примітка: за рівнем виробництва ls /etc/cron.dеквівалентна cd /etc/cron.d && ls. Єдина відмінність - робочий каталог не зміниться.
Дрю Шапін

Відповіді:


49

Файли, які /etc/cron.dпотребують, також перелічують користувача, під яким слід виконати завдання.

тобто

0,15,30,45 * * * * root /backup.sh >/dev/null 2>&1

Ви також повинні переконатися, що дозволи та власник: група встановлена ​​правильно ( -rw-r--r--і належить їй root:root)


16
crontab -lзвіти про записи в cron /var/spool/cron/crontabs/- тобто на кліткових даних на кожного користувача . /etc/cron.dФайли - це системні кронти та не повідомляються crontab -l.
Стівен Харріс

5
Насправді я згадав, що це не працює, але я просто зрозумів, що це після додавання rootу файл - просто crontab -lне згадав про це, як ви пояснили, чому - дякую за вашу допомогу
Jivan

9
видається, що також ім'я файлу має роль. У моєму випадку я додав etc/cron.dфайл до крапки посеред імені, і завдання так і не було виконано, поки я не перейменував його
pic

20
тут же проблема, тире "-" у назви файлу, змінивши їх на підкреслення "_" вирішило проблему, завдання запустилися негайно.
Роб

1
У мене теж був тире ... що .... чому ?! У будь-якому випадку, дякую @Rob
Микола Димитров

8

Ще одна річ, яку я помітив, - це те, що файл у файлі /etc/cron.dне може мати розширення. У моєму конкретному випадку у мене було символічне посилання:

# my-job.crontab
* * * * * root echo "my job is running!" >> /tmp/my-job.log

$: ln -sf /home/me/my-job.crontab /etc/cron.d/
# This did not work -> job would not run

$: ln -sf /home/me/my-job.crontab /etc/cron.d/my-job
# This did work -> job ran fine

Обмеження імені файлу задокументовано на сторінці чоловіка запуску: http://manpages.ubuntu.com/manpages/xenial/man8/run-parts.8.html , можна передати опцію --regex, щоб змінити формат файлу.

Однак поведінка Cron за замовчуванням залишається без розширень, дивіться коментарі за посиланням: https://bugs.launchpad.net/ubuntu/+source/debianutils/+bug/38022


Людина, ти врятував мені день!
elboletaire

2
Це правильно в Ubuntu (можливо, на всіх похідних Debian дистрибутивах). На Amazon Linux (а можливо, і на всіх дистрибутивах Redhat) ви можете мати крапку у назві файлу. Дякую Unix.SE.
Закон29

Я просто перевірив чистий Debian, і там теж не працюють точки. Дефіси спрацьовують (на відміну від сказаного вище коментаря).
Закон29

4

Я думаю, ви, мабуть, просто не вистачаєте необхідного порожнього рядка з кінця файлу cron. У мене був такий самий випуск, але перевіривши все, що перераховано тут (дозволи користувачів, ім’я файлу, версія cron тощо), я зрозумів, що після останнього запису в моєму записі не було розриву рядка, /etc/cron.d/own_cronі це спричиняє ігнорування всього файлу.


2

Якщо ви єдиний користувач на цьому комп’ютері, ви можете використовувати просто crontab -e. Вам буде запропоновано вибрати редактор під час першого запуску команди. Потім ви можете додати це до нього:

0,15,30,45 * * * * /backup.sh >/dev/null 2>&1

Якщо ви перейдете на звичайний обліковий запис користувача, вам потрібно буде скористатися sudo crontab -eдля налаштування сценаріїв, для яких планується запуск root.

crontab -lвідображає лише поточний crontab, як тільки ви встановите його за допомогою crontab -e. Якщо у вас є файл cron в /etc/cron.d/, він не відображатиметься разом із crontab -l.

Ви також повинні переконатися , що ваш скрипт виконуваним: chmod +x /backup.sh.


1
спасибі - у цьому випадку кронтаб встановлений у контексті, Dockerfileтому я справді не можу це зробити crontab -e- але все одно корисна інформація
Jivan

2

Для Cron з * bian distros (як Raspbian) вам потрібно включити -lпараметр демона Cron. Це доцільно робити за допомогою /etc/default/cronконфігураційного файлу, що дозволяє EXTRA_OPTS.


Це було знято, але в деяких випадках це правильно, хоча й не пояснено. У дистрибутивах, що базуються на Debian, -lопція демону cron надає розширений набір імен файлів у /etc/cron.dкаталозі, тому якщо файл мовчки ігнорується, оскільки в ньому є крапка, то або "додавання -l", або "видалення точки" виправить проблему.
Закон29

1

Перевірте свою версію cron.

Здається, що якщо ви використовуєте клінку Діллона, користувач не потребує /etc/cron.dзапису.

Я зрозумів це після того, як майже витягнув волосся, що залишилися.

У мене є кілька записів, які були /etc/cron.dзавантажені різними встановленнями. Після деякого розслідування я виявив, що один з них працює. У нього не було користувача. Тож я вивів користувача з інших. І вони почали працювати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.