Надійне відключення конкретного крона. {Погодинний, щоденний, щотижневий} сценарій


25

У різних системах, якими я адмініструю, існують сценарії кронів, які запускаються через широко використовуваний /etc/cron.{hourly,daily,weekly}макет. Що я хочу знати, чи є якась загальна функція "відключити цей скрипт".

Очевидно, що просто видалення чогось із заданого каталогу відключить це, але я шукаю більш постійне рішення. Видалення /etc/cron.daily/slocateбуде працювати, щоб вимкнути ніч updatedbна моїй домашній машині (де я ніколи не використовуюсь slocate), але наступного разу, коли я оновлю пакет пакету, я впевнений, що він знову з’явиться.

Два дистрибуції, які мене найбільше цікавлять, - це Gentoo та OpenSUSE, але я сподіваюся, що існує широко впроваджений механізм. Обидва дистрибутива, як у мене, використовують vixie-cron (не впевнений, що це має значення).

Відповіді:


45

Ви повинні мати можливість chmod -x scriptnameвідключити скрипт, але залишити файл на місці.


5
Це може або не може бути скасоване системою управління пакетами. Ви можете зробити це більш надійним, зробивши chattr +i scriptnameпісля цього chmod.
mc0e

@ mc0e дякую, що ви навчали мене про незмінні файли, але, як хтось колись сказав , вони страшні . Якщо я коли-небудь забув, що я робив, це може призвести до дуже неприємних проблем.
Джонатан Ю.

2
@JonathanY. Ось для чого lsattr- видалити страшне (у ньому перераховані атрибути файлу).
Призупинено до подальшого повідомлення.

1
DW впевнений, але знання атрибутів файлів, коли щось стає незрозумілим неправильно (як і в тій темі, до якої я пов’язаний), справжній удар тут.
Джонатан Ю.

@JonathanY. Отже, тепер ви знаєте. :-) У будь-якому випадку, я думаю, що "страшний" біт у цій пов'язаній темі стосується помилки Pacman, а не chattr
mc0e

9

run-parts не виконує завдання, які мають крапку у своєму імені

mv /etc/cron.d/job /etc/cron.d/job.disabled

зробить трюк.


1
На жаль, у оновлення програми виникне та сама проблема - вона перевірить, чи існує робота cron, а оскільки вона не існує за її початковою назвою, вона буде відтворена.
Дженні Д каже, що поверніть Моніку

2
Повернення під час оновлення програми є побічним ефектом використовуваного пакетного інструменту, його неможливо виправити простими засобами, і це не вина Крона. Деякі системи пакетів запускають і вкладають попередні файли, інші відрізняють новий і старий, і підкажуть, чи є зміни, які потрібно переглянути. Незважаючи на це, оновлення, що спричиняють ненавмисне поведінку, мають стати неприємною, але рутинною частиною адміністрування систем Unix. Просто занадто багато пакетів рухається занадто швидко, щоб регулярно переглядати всі зміни на їх вплив у кожному окремому середовищі.
peelman

У Debian існує поняття про переадресацію файлу - тобто ви зможете ефективно перейменувати файл, поки ним ще керує менеджер пакунків. Можливо, подібний механізм існує у Gentoo та / або SUSE?
Бас

9

Зазвичай cron.dailyвикликається через /etc/crontabлінію, наприклад, наприклад,

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

man run-parts надає варіанти.

run-parts --test /etc/cron.daily показує, які завдання виконуються без їх запуску.

Я вважаю за краще зробити субдір "Інвалідів" і переїхати туди.

У будь-якому випадку, якщо ви оновлюєте пакет, цілком ймовірно, що завдання знову встане на місце або вилучені «х» біти відновляться


1

Ви можете видалити пакет, який ви не будете використовувати.


Це був лише приклад, але все-таки хороша порада, дякую. (Я думав, що щось може залежати від місця, але нічого не здається.)
benizi

Видаліть слокате та встановіть натомість mlocate. Набагато краще.
mc0e

1

Якщо ви використовуєте cfengine ( https://cfengine.com/ ), ви можете це зробити з відключенням. Ви просто напишете файл з обіцянками для групи хостів, і він застосує себе в наступному запуску cfagent. Зробити це з лялькою або шеф-кухарем або будь-яким іншим також слід досить просто.


Цікаво. Я стикався лише з інструментами управління конфігурацією дуже дотично. Я шукав загальне рішення "Я маю довільну систему, схожу на Unix".
benizi

1

/Etc/cron.daily та ін. ін. сценарії виконуються за допомогою сценарію, який називається run-parts. Цей сценарій відрізняється. Наприклад, зазначений вище перемикач --test не знаходиться на машині, якою я зараз користуюся.

Виконати частини - це сценарій баш. Це, як правило, корисний інструмент для запуску всіх сценаріїв у каталозі, який подається як аргумент. Зазвичай він знаходиться в / usr / bin / run-parts.

Він має клубок логіки для вирішення того, що бігти. Цей код містить відповідь на ваше запитання, але він також змінюється. Тому вам потрібно прочитати код, щоб бути безпечним.

У версії, на яку я дивлюся, є логіка, яка під час роботи з каталогом <foo> перевіряє наявність <foo> /jobs.deny. Якщо це існує, він відмовляється запускати будь-який скрипт, який згадується у цьому файлі, у рядку. Якщо припустити, що у вас є ця функціональність, вона є приголомшливою, оскільки вона буде працювати, коли встановлений або оновлений пакет, який встановлюється.


0

Якщо crontabsви маєте справу з RHEL та похідними (які надає пакет), ви можете явно відключити завдання, ввівши його ім'я у jobs.denyфайл.

З crontabs / Run-сторінки людини :

Виконання файлів можна дозволити або відмовити, створивши файл jobs.allow або jobs.deny, який працював аналогічно іншим конфігураційним файлам дозволу / заборони. Файл повинен бути створений у вказаному каталозі.

Example /etc/cron.daily/jobs.deny може містити, наприклад, 0logwatch, що забороняє виконання цього сценарію.


-1

Якщо ви також не хочете користувальницьких crontabs, просто відключіть crond у списку послуг.

У Debian та версіях, заснованих на Debian, це просто питання про видалення символьної посилання з відповідного /etc/rcX.d (для runlevel X).

Я не знаю, як ви обробляєте послуги в SUSE або Gentoo.


4
Це просто погана ідея. Всього вимкнення cron повністю відключить такі корисні завдання з обслуговування, як logrotate, updatedb, можливо, без нагляду оновлення та стандартні резервні копії.
Тобу

Updatedb - саме те завдання, яке я намагаюся відключити (оновлення db для slocate). Тим не менш, так, погані поради взагалі.
benizi

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