Как отключить всё в crontab -l?

Вопрос или проблема

Я просто хочу приостановить всё. Не выполняйте ничего, что указано в crontab -l.

crontab -e, затем закомментируйте каждую строку, которую не хотите запускать, с помощью #.

Сначала создайте резервную копию crontab:

crontab -l > my_cron_backup.txt

Затем вы можете очистить его:

crontab -r

Чтобы восстановить:

crontab my_cron_backup.txt
crontab -l

Это работает только для crontab пользователя, который выполняет эти команды, и не очищает/восстанавливает crontab других пользователей. Мой другой ответ касается приостановки запусков от всех пользователей.

У вас есть доступ root? Просто приостановите cron

sudo /etc/init.d/crond stop

Затем перезапустите его, когда будете готовы

sudo /etc/init.d/crond start

Если вы используете vi в качестве редактора, просто введите :%s/^/#/ в командном режиме. Во всех строках (%), он заменяет (s///) начало строки (^) на хэш (#).

Я не был доволен вышеперечисленными вариантами, так как они не были однострочными.

Чтобы отключить crontab -l | perl -nle 's/^([^#])/# $1/;print' | crontab

Чтобы включить crontab -l | perl -nle 's/^#\s*([0-9*])/$1/;print' | crontab

пример использования (отредактирован, чтобы показать, что это не отключает комментарии)

$ crontab -l
# Комментарий
0 0 * * 0 /opt/something.sh

$ crontab -l|perl -nle 's/^([^#])/# $1/;print'|crontab
$ crontab -l
# Комментарий
# 0 0 * * 0 /opt/something.sh

$ crontab -l|perl -nle 's/^#\s*([0-9*])/$1/;print'|crontab
$ crontab -l
# Комментарий
0 0 * * 0 /opt/something.sh

Я протестировал это на RHEL и AIX, и оно должно работать из коробки без необходимости установки чего-либо

В моих ограниченных тестах установка shell на /bin/false работает. Вы все равно будете видеть /opt/job.sh, выполняющееся в ваших логах, но это будет no-op:

SHELL=/bin/false

*/1 * * * *    root  /some/job.sh

Я получил идею от ответа, предоставленного @segaps

Чтобы отключить:

crontab -l | awk '{print "# "$0}' | crontab

Чтобы включить:

crontab -l | cut -c 3- | crontab

Единственная проблема с решением, предоставленным segaps, заключается в том, что оно раскомментирует задания, которые уже закомментированы пользователем.

На любом дистрибутиве Unix/Linux, который я знаю (кроме, возможно, OpenBSD):

mv /var/spool/cron  /var/spool/cron_is_disabled

Это:

  • отключает crontab всех пользователей
  • но не системный /etc/crontab (/etc/cron.daily и т. д.)
  • сохраняется после перезагрузки
  • это однострочник, да 🙂

Вы можете использовать следующее следующим образом:

crondisable
cronenable

crondisable some_other_user
...

Код zsh (поместите в ваш .zshrc):

ecerr () {
print -r -- "$@" >&2
}
crondisable() {
        local user="${1:-$(whoami)}"
        local cronpath="/tmp/$user.cron.tmp"
        test -e "$cronpath" && {
        ecerr "Существует уже отключенный crontab по адресу $cronpath. Удалите его вручную, если хотите продолжить."
        return 1
        }
        crontab -l -u $user > "$cronpath"
        crontab -r -u $user
}
cronenable() {
        local user="${1:-$(whoami)}"
        local cronpath="/tmp/$user.cron.tmp"
        test -e "$cronpath" || {
        ecerr "Нет отключенного cron по адресу $cronpath"
        return 1
        }
        crontab -u $user "$cronpath"
        mv "$cronpath" "${cronpath}.bak"
}

В современном Linux, который имеет systemd:

sudo systemctl stop crond.service

Который затем можно снова включить с помощью

sudo systemctl start crond.service

Чтобы сделать это, используя nano в качестве редактора:

sudo env EDITOR=nano crontab -e

затем закомментируйте каждую строку, которую не хотите запускать, с помощью #

Ответ или решение

Для временного отключения всех заданий в crontab вы можете использовать несколько различных подходов, в зависимости от ваших нужд и прав доступа. Рассмотрим подробнее каждый из предложенных методов.

1. Комментирование строк

Самый простой способ — это комментировать каждую строку в crontab с помощью символа #. Для этого выполните следующие шаги:

  1. Создайте резервную копию текущего crontab:

    crontab -l > my_cron_backup.txt
  2. Откройте crontab для редактирования:

    crontab -e
  3. Закомментируйте каждую строку, добавив в начале строки символ #. Если вы используете текстовый редактор vi, вы можете выполнить команду :%s/^/#/, которая автоматически добавит # в начало каждой строки:

    :%s/^/#/
  4. Сохраните и закройте редактор.

2. Полное удаление crontab

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

crontab -r

Чтобы восстановить его позже, просто используйте файл резервной копии:

crontab my_cron_backup.txt

Этот метод удаляет задания только для текущего пользователя и не затрагивает crontab других пользователей.

3. Остановка службы cron

Если у вас есть права на выполнение команд от имени суперпользователя, вы можете остановить всю службу cron. Это более радикальный подход, но он эффективно предотвратит выполнение всех заданий cron:

  • Чтобы остановить службу:

    sudo systemctl stop crond.service
  • Чтобы перезапустить службу позже:

    sudo systemctl start crond.service

4. Использование команд однострочников

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

  • Для отключения всех заданий в crontab:

    crontab -l | perl -pe 's/^(?!#)/#/' | crontab
  • Для включения обратно:

    crontab -l | perl -pe 's/^# //' | crontab

5. Изменение shell на /bin/false

Другой менее традиционный метод заключается в изменении SHELL на /bin/false. Это позволит заданиям выполняться, но они не будут выполнять реальные действия:

SHELL=/bin/false

При использовании этого метода в логах всё равно будет отображаться выполнение команд, но фактически выполнение не произойдет.

Заключение

Выбор подходящего метода отключения заданий в crontab зависит от ваших целей: временное отключение, полное удаление или остановка службы. Каждый из методов имеет свои плюсы и минусы, и вам следует выбрать тот, который лучше всего соответствует вашим требованиям. Не забудьте всегда делать резервные копии перед внесением изменений, чтобы избежать потери важной информации или настройки.

Оцените материал
Добавить комментарий

Капча загружается...