як тимчасово відключити користувальницьку роботу?


14

Як я можу тимчасово відключити роботу одного чи декількох користувачів у роботі з крон? Зокрема, я не хочу призупиняти права користувача на крон - просто не звільняти жодну їх роботу.

Я перебуваю на системах SLES 11 SP2 та SP3


Ви не можете просто скористатися -u userперемикачем crontabкоманди та поставити #символ коментування перед завданнями, щоб відключити певного користувача?
Яніс

@Janis, то мені потрібно слідкувати за тим, що користувач (їх багато) вже прокоментував, плюс користувач може продовжити і додати ще щось (я не додаю їх до /etc/cron.deny). Занадто багато ручної роботи :(
Дінеш

Дінеш, я (неправильно) зрозумів, що ви хочете тонкозернистий контроль над тим, що ви відключили.
Яніс

Відповіді:


10

touch /var/spool/cron/crontabs/$username; chmod 0 /var/spool/cron/crontabs/$usernameповинен зробити трюк. Відновіть за допомогою ( chmod 600і touchвам потрібно змінити mtime файлу, щоб зробити cron (спроба) перезавантажити його).

Щонайменше з Debian і, мабуть, з Vixie cron в цілому, chmod 400 /var/spool/cron/crontabs/$usernameтакож робиться трюк, оскільки ця реалізація наполягає на тому, щоб дозволи були рівно 600. Однак це триває лише до тих пір, поки користувач не запустить crontabкоманду.

Якщо ви хочете отримати надійний спосіб, я не думаю, що є нічого кращого, ніж тимчасово перемістити їхні крони із шляху або змінити дозволи та тимчасово додати їх /etc/cron.deny.


Спасибі. У моїй системі це / var / spool / cron / tabs / $ username. Але це все ще виконується навіть після chmod.
Дінеш

Після зміни файлових perms, мені також потрібно було зупинити / перезапустити cron. Я думав, що це, ймовірно, тому, що cron може зберігати цей матеріал у пам'яті. Тому я додав touch $usernameпісля chmod. Але це не допомогло. (Btw отримав вашу думку cron.deny)
Дінеш

@Dinesh Дійсно, вам потрібно оновити mtime файлу, інакше cron вважає, що він не змінився і зберігає кешовану інформацію. Я помітив це під час тестування вчора, але забув згадати це у своїй відповіді, вибачте за це.
Жил "ТАК - перестань бути злим"

Якщо ви хочете відключити для всіх стандартних користувачів просто:chgrp root /var/spool/cron/crontabs
shrimpwagon

9

Як щодо подібного відключити користувацький crontab:

crontab -l -u [username] >/tmp/[username].cron.tmp
crontab -r -u [username]

і знову включити:

crontab -u [username] /tmp/[username].cron.tmp

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


0

Якщо ви використовуєте Debian, це стосується лише Debian AFAIK :

Це можна зробити, додавши крапку до назви кроні.

Поведінка посилається на офіційні документи Debian:

https://www.debian.org/doc/debian-policy/#cron-job-file-name

Ім'я файлу завдання cron не повинно містити символів періоду чи плюс (. Або +), оскільки це призведе до того, що cron ігнорує файл. Підкреслити (_) слід використовувати замість. та + символів.


0

Якщо ви просто хочете на cronдеякий час повністю припинити всі завдання - наприклад, під час обслуговування системи, з якою вони можуть погано взаємодіяти - команди, як правило,

systemctl stop crond.service

і, щоб відновити

systemctl start crond.service

Я припускаю, що для їх виконання вам потрібні повноваження root або wheel; при необхідності запустіть їх через sudo або (остання можливість) увійти як root.

Перевищення конкретного поставленого питання, але забезпечує "єдину покупку" і не вимагає гри з файловою системою або тимчасовими файлами.


3
Оскільки це вимикає крон для всіх користувачів, він насправді не відповідає на питання.
Скотт

-1

Я погоджуюся, шлях через systemctl повинен пройти. На малині пальці ніг були б

sudo systemctl stop cron.service
sudo systemctl start cron.service

1
Це зупинить всю cronслужбу. ОП хотіла мати можливість вибирати кронові вкладки користувачів для відключення.
roaima

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