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

71

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

Alex
источник

Ответы:

64

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

gregf
источник
135

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

crontab -l > my_cron_backup.txt

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

crontab -r

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

crontab my_cron_backup.txt
crontab -l
kubanczyk
источник
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
muffinista
источник
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 ///) начало строки (^) на хеш (#).

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

segaps
источник
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.)
  • сохраняется после перезагрузки
  • однострочник :)
kubanczyk
источник
1

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

Отключить:

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

Включить:

crontab -l | cut -c 3- | crontab

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

Сарвсав Шарма
источник
0

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

sudo env EDITOR=nano crontab -e

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

Сэм Смит
источник