как временно отключить cronjobs пользователя?


14

Как временно отключить одно или несколько заданий пользователя cron? В частности, я не хочу приостанавливать права пользователя на cron - просто не увольнять их.

Я нахожусь на 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команду.

Если вы хотите надежный способ, я не думаю, что есть что-то лучше, чем временно убрать их crontab или изменить разрешения и временно добавить их в /etc/cron.deny.


Благодарю. В моей системе это / var / spool / cron / tabs / $ username. Но он все еще выполняется, даже после chmod.
Динеш

После изменения файла perms мне также нужно было остановить / перезапустить cron. Я думал, что это, вероятно, потому что Cron может держать вещи в памяти. Поэтому я добавил touch $usernameпосле chmod. Но это не помогло. (кстати, получил ваше мнение 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

Это дает дополнительное преимущество, заключающееся в том, что вы можете запускать его как этот пользователь без необходимости суперпользователя (просто уберите параметр -u)


0

Если вы используете Debian, это относится только к Debian AFAIK :

Вы можете сделать это, добавив точку к имени cronjob.

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

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

Имя файла задания cron не должно содержать символы точки или плюс (. Или +), поскольку это приведет к тому, что cron проигнорирует файл. Символ подчеркивания (_) следует использовать вместо. и + символы.


0

Если вы просто хотите на время полностью остановить все cronзадания, например, во время обслуживания системы, с которым они могут плохо взаимодействовать, команды обычно

systemctl stop crond.service

и, чтобы возобновить

systemctl start crond.service

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

Избыточное количество для конкретного поставленного вопроса, но обеспечивает «универсальные покупки» и не требует воспроизведения с файловой системой или временными файлами.


3
Так как это отключает cron для всех пользователей, он не отвечает на этот вопрос.
Скотт

-1

Я согласен, путь через systemctl - единственный. На малине, пальцы ног будут

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

1
Это остановит весь cronсервис. ОП хотел иметь возможность выбрать, какие пользовательские crontabs отключить.
Ройма

1
Это также идентично другому ответу.
Ройма
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.