Як відключити все в crontab -l?


68

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

Відповіді:


61

crontab -eпотім прокоментуйте кожен рядок, з яким ви не хочете запускати #.


133

Спочатку створіть резервну копію крона:

crontab -l > my_cron_backup.txt

Тоді ви можете спорожнити його:

crontab -r

Відновити:

crontab my_cron_backup.txt
crontab -l

2
Це особливо корисно , коли /tmpпошкоджений (і якщо ваш кронтаб -e використовує mktempв /tmp.
Kevin Lee

1
+1 Нарешті, саме це працювало для мене. Дякую
Pavan

@alex Це має бути прийнята відповідь
Луїс Феррао

crontab -rце те, що я шукав. Дякую !
forzagreen

64

У вас є кореневий доступ? Просто призупиніть cron

sudo /etc/init.d/crond stop

Потім перезапустіть його, коли будете готові

sudo /etc/init.d/crond start

5
Тобто, якщо ви хочете зупинити crontab для всіх користувачів, включаючи root. Вибрана відповідь та відповідь kubanskamac зробили це лише для поточного (бажаного?) Користувача.
Кевін К

нашу службу переробки було зупинено. Це вказувало нам у правильному напрямку, щоб перевірити, чи працює crond, та перезапустити.
Пол

4
Якщо ви перебуваєте на Ubuntu, ви можете скористатисяsudo service cron stop
Joel

1
У Debian це /etc/init.d/cron stop.
Faheem Mitha

2
@Faheem на Debian сьогодні також є service cron stop.
Стівен Кітт

10

Якщо ви використовуєте vi як редактор, тоді просто введіть :%s/^/#/у командному режимі. У всіх рядках (%) він замінює (s ///) початок рядка (^) хешем (#).


Якщо ви не використовуєте vi в якості редактора за замовчуванням, ви можете «примусити» використання vi like EDITOR=vi; crontab -e, і ніж ви можете використовувати трюк, описаний вище.
Betlista

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 /; надрукувати, якщо /.+mytexttofind.+/'
Джейсон

Чи можете ви поясніть, чому коментарі не зачіпаються? Яку схему ви використовуєте для їх виявлення?
Sopalajo de Arrierez

Хм, під 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

Це:

  • вимикає кронт-вкладки всіх користувачів
  • але не system / etc / crontab (/etc/cron.daily. тощо)
  • зберігається через перезавантаження
  • це однолінійний, так :)

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.