Завдання cron.daily не працює


19

Я створив 3 робочих щоденних робочих записів на роботі з крон.

Нижче наведено три, які розміщуються в etc / cron.daily

rkhunter.sh

#!/bin/sh
(
rkhunter --versioncheck
rkhunter --update
rkhunter --cronjob --report-warnings-only
) | mail -s 'rkhunter Daily Run (my server)' me@email.com

chkrootkit.sh

#!/bin/bash
chkrootkit | mail -s "chkrootkit Daily Run (my server)" me@email.com

logwatch.sh

#!/bin/sh
(
logwatch
) | mail -s 'logwatch Daily Log (my server)' me@email.com

Я замінив мені@email.com звичайно своїм електронним листом.

Якщо я запускаю цю cronjob вручну, вона прекрасно працює ./nameoffile.sh

Але це не працює щодня, що може бути причиною чи як я можу це перевірити?


2
Переконайтесь, що файли, створені у cron.daily / щотижня / погодинно / тощо, виконуються лише у виконанні chmod + x /etc/cron.daily/wever
Turgut Kalfaoglu

Відповіді:


6

Є два можливих підозрюваних, які зазвичай викликають cronнеможливість роботи.

Перший - це проблеми з дозволом, тобто користувач може запускати скрипт / команду, але демон cron не може, оскільки завдання знаходиться в завданнях cron невірного користувача. Наприклад, користувач створює скрипт або виконує команду з підвищеними привілеями, тобто використовуючи sudo, потім додає перевірений скрипт / команду до свого списку завдань cron ( crontab). Результат полягає в тому, що завдання cron користувача не зможе виконати, оскільки йому потрібні підвищені привілеї.

  • Щоб поставити завдання cron у тип crontab поточного користувача crontab -e
  • Щоб помістити завдання cron у тип crontab root sudo crontab -e

Друга причина - це шляхи, щоб впевнитись у виконанні скрипту, користувач повинен додати повний шлях до сценарію, який буде виконуватися в crontab. Іншим рішенням буде розширити змінну PATH кореневих користувачів, поставивши наступний рядок у верхній частині файлу crontab:

PATH=/usr/sbin:/usr/bin:/sbin:/bin

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

Ви можете прочитати вікі спільноти про cron, оскільки воно надає більш детальну інформацію про вищезазначене.


Тож я просто поклав туди ім'я файлу?
sonicboom

Це насправді говорить про те, що немає попереднього завдання cron для root, і ви збираєтесь написати свій перший, а потім він попросить вас вибрати редактор, щоб змінити crontab. Просто виберіть його з меню (1.bin / ed тощо). Підібрати нано легко, просто зверніть увагу на інструкції.
Стеф К

Отже, щоб запускати один раз на день о 10:00, я поставив би тест * 22 * ​​* *> rkhunter.sh так?
sonicboom

ах приголомшливий! я спробую зараз!
sonicboom

Для чого тест> rkhunter.sh?
sonicboom

76

Відповідно до цієї відповіді, проблема полягає у розширенні .sh. Видаліть це (так, наприклад, перейменуйте свій файл з rkhunter.sh в rkhunter.

Для підтвердження запустіть наступну команду run-parts --test /etc/cron.daily

Якщо ваш сценарій (rkhunter) включений в результати, все добре. Для отримання додаткової інформації про команду run-parts читайте довідкові сторінки на нійman run-parts


1
Це відповідь, яку я шукав, після різних тестів я зрозумів, що виконується ще один файл сценарію без розширення sh
Albert Català

5
як сказав @rharriso у своїй відповіді. це не стільки проблема з ".sh", скільки проблема з ".". будь-який файл із будь-яким розширенням буде пропущений. цитую безпосередньо з man run-parts"імена повинні повністю складатися з великих і малих літер ASCII, цифр ASCII, підкреслення ASCII та мінус-дефісів ASCII"
північний Брадлі

11

У моїй системі це було тому, що анакрон не був встановлений.

grep run-parts /etc/crontab

17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

Отже, або встановіть анакрон, або видаліть тест -x / usr / sbin / anacron


1
+1 Чи не встановлено анакрон за замовчуванням? Я б цього очікував. Я думаю, що це вирішило б це для мене. Спасибі.
лепе

Звичайно, цього не було на моєму .. FFS, я впевнений, це було, оскільки сценарій виконувались кілька місяців тому !: dpkg --get-selections | grep cron.. <
swears

Так, я не знаю, що сталося, оскільки це пакет, який зазвичай встановлюється при запуску.
Натим

10
Це насправді не правильно. anacronне потрібно; ||оператор в кронтаб команди запускає , run-partsколи Anacron НЕ встановлено. Коли anacronвстановлено, ці команди щоденно / щотижня / щомісяця роблять run-partsзайвими.
TalkLittle

То, можливо, це було через те, що бігові частини не працювали? У будь-якому випадку, встановивши анакрон, це виправлено для мене.
Natim

10

Я думаю, що файли з розширеннями ігноруються.

запустити:

 run-parts --test /etc/cron.daily

Якщо ви не бачите своїх скриптів у списку, видаліть розширення .sh та повторіть спробу.


5

Додавши до відповіді Stef, ви також повинні переконатися, що вони мають виконуваний біт:

$ ls -l
-rwxr-xr-x  1 root root   268 Jun  1 08:06 00logwatch
-rwxr-xr-x  1 root root   311 May 22  2012 0anacron
-rwxr-xr-x  1 root root 15007 Jun  6 14:08 apt

Ви повинні мати можливість запускати їх за допомогою chmod +x filename.


Які файли це? це вміст папки /etc/logrotate.d?
realtebo

4

Перейменуйте свій файл, щоб не було розширення .sh

Щоб переконатися, що це проблема, спробуйте

sudo run-parts --list /etc/cron.daily 

ви побачите, що це не в списку. Тож біжіть:

mv script.sh script

і повторіть спробу. Його слід перерахувати.


Здається, ці проблеми впливають на будь-який виконуваний файл, який має розширення. У мене були імена файлів "filename.ca", і він також не став би його в списку, поки я не перейменував його також "ім'я файлу"
kiwicomb123

0

Я не міг змусити його працювати з анакроном, я видалив анакрон /etc/crontabі виконав, apt remove --purge anacronі він працює відразу.

Я не розумію, для чого нам потрібні два планувальники.


0

Така сама ситуація сьогодні

я зробив

sudo journalctl -u cron -b | grep -i error

і знайшли

cron[815]: Error: bad hour; while reading /etc/crontab
cron[815]: (*system*) ERROR (Syntax error, this crontab file will be ignored)

Я виявив, що хтось (я !!!!) додав рядок, починаючи з

20 38 ...

і, очевидно, 38-а година не існує!

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