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


71

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

Ответы:


64

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


135

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

crontab -l > my_cron_backup.txt

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

crontab -r

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

crontab my_cron_backup.txt
crontab -l

2
Это особенно полезно, когда /tmpповрежден (и если ваш crontab -e использует mktempin /tmp.
Кевин Ли

1
+1 Наконец, это то, что сработало для меня. Спасибо
Паван

@alex Это должен быть принятый ответ
Луис Феррао

crontab -rэто то, что я искал. Спасибо !
forzagreen

65

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

sudo /etc/init.d/crond stop

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

sudo /etc/init.d/crond start

5
Это предполагает, что вы хотите остановить crontab для всех пользователей, включая root. Выбранный ответ и ответ kubanskamac сделают это только для текущего (желаемого?) Пользователя.
Кевин К

наша служба Crond была остановлена. Это указало нам в правильном направлении, чтобы проверить, работал ли crond, и перезапустить.
Пол

4
Если вы на Ubuntu, вы можете использоватьsudo service cron stop
Джоэл

1
На Debian это есть /etc/init.d/cron stop.
Фахим Митха

2
@Faheem на Debian сегодня тоже service cron stop.
Стивен Китт

10

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


Если вы не используете vi в качестве редактора по умолчанию, вы можете «форсировать» использование vi like EDITOR=vi; crontab -e, а затем использовать трюк, описанный выше.
Бетлиста

2
Чтобы раскомментировать, команда:%s/^#//
NP01

3

Не был доволен вариантами выше, так как они не были одним лайнером.

Отключить 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, и должно работать из коробки без необходимости установки


1
Также можете посмотреть конкретные подробности в cronjob crontab -l | perl -nle 's / ^ # \ s * ([0-1 *]) / $ 1 /; print if /.+mytexttofind.+/'
Джейсон

Не могли бы вы объяснить, почему комментарии не затрагиваются? Какой шаблон вы используете для их обнаружения?
Сопалахо де Арриерес

Хм, под Debian Jessie я получаю следующее сообщение об ошибке: crontab: usage error: file name must be specified for replace. Кажется, вы должны указать файл (?) При использовании crontabбез каких-либо параметров (что replaceпо умолчанию).
fritzmg

2

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

SHELL=/bin/false

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

1

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

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

Этот:

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

1

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

Отключить:

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

Включить:

crontab -l | cut -c 3- | crontab

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


0

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

sudo env EDITOR=nano crontab -e

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

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