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

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

9 ответов

Решение

crontab -e затем закомментируйте каждую строку, с которой вы не хотите работать #,

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

crontab -l > my_cron_backup.txt

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

crontab -r

Восстановить:

crontab my_cron_backup.txt
crontab -l

У вас есть 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
# Comment
0 0 * * 0 /opt/something.sh

$ crontab -l|perl -nle 's/^([^#])/# $1/;print'|crontab
$ crontab -l
# Comment
# 0 0 * * 0 /opt/something.sh

$ crontab -l|perl -nle 's/^#\s*([0-9*])/$1/;print'|crontab
$ crontab -l
# Comment
0 0 * * 0 /opt/something.sh

Протестировано это на RHEL и AIX, и должно работать из коробки без необходимости установки

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

SHELL=/bin/false

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

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

Отключить:

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

Включить:

crontab -l | cut -c 3- | crontab

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

В любой разновидности Unix/Linux, о которой я знаю:

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

Это:

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

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

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 "There is already a disabled crontab at $cronpath. Remove that manually if you want to proceed."
        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 "No disabled cron at $cronpath"
        return 1
        }
        crontab -u $user "$cronpath"
        mv "$cronpath" "${cronpath}.bak"
}

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

sudo env EDITOR=nano crontab -e

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

Другие вопросы по тегам