Я просто хочу все приостановить. Не выполняйте ничего из перечисленного crontab -l
.
Сначала сделайте резервную копию crontab:
crontab -l > my_cron_backup.txt
Затем вы можете его очистить:
crontab -r
Восстановить:
crontab my_cron_backup.txt
crontab -l
crontab -e
затем закомментируйте каждую строку, которую вы не хотите запускать #
.
У вас есть 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
В любом известном мне варианте Unix / Linux:
mv /var/spool/cron /var/spool/cron_is_disabled
Это:
Я понял эту идею из ответа @segaps
Отключить:
crontab -l | awk '{print "# "$1}' | crontab
Включить:
crontab -l | cut -c 3- | crontab
Единственная проблема с решением, предоставляемым segaps, заключается в том, что оно раскомментирует задания, которые уже прокомментированы пользователем.
Для этого используя nano в качестве редактора:
sudo env EDITOR=nano crontab -e
затем закомментируйте каждую строку, которую вы не хотите запускать, с помощью #
Вы можете использовать следующее:
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"
}