Jak wyłączyć wszystko w crontab -l?

68

Chcę tylko wszystko zatrzymać. Nie wykonuj niczego na liście crontab -l.

Alex
źródło

Odpowiedzi:

61

crontab -enastępnie skomentuj każdą linię, z którą nie chcesz biegać #.

gregf
źródło
133

Najpierw utwórz kopię zapasową pliku crontab:

crontab -l > my_cron_backup.txt

Następnie możesz go opróżnić:

crontab -r

Przywrócić:

crontab my_cron_backup.txt
crontab -l
kubańczyk
źródło
2
Jest to szczególnie przydatne, gdy /tmpjest uszkodzony (a jeśli crontab -e wykorzystuje mktempw /tmp.
Kevin Lee
1
+1 Wreszcie to mi się udało. Dziękuję
Pavan
@alex To powinna być zaakceptowana odpowiedź
Luis Ferrao,
crontab -rtego szukałem. Dzięki !
forzagreen
64

Czy masz dostęp do roota? Po prostu zatrzymaj crona

sudo /etc/init.d/crond stop

Następnie uruchom go ponownie, gdy będziesz gotowy

sudo /etc/init.d/crond start
muffinista
źródło
5
Zakłada się, że chcesz zatrzymać crontab dla wszystkich użytkowników, w tym root. Wybrana odpowiedź i odpowiedź kubanskamac zrobiłyby to tylko dla bieżącego (pożądanego?) Użytkownika.
Kevin K,
nasza usługa crond została zatrzymana. To wskazało nam właściwy kierunek, aby sprawdzić, czy crond działa, i uruchom ponownie.
Paul
4
Jeśli korzystasz z Ubuntu, możesz użyćsudo service cron stop
Joel
1
Na Debianie to jest /etc/init.d/cron stop.
Faheem Mitha,
2
@ Faheem na Debianie, obecnie jest to również service cron stop.
Stephen Kitt,
10

Jeśli używasz vi jako edytora, to po prostu wejdź :%s/^/#/w tryb poleceń. We wszystkich liniach (%) podstawia (s ///) początek linii (^) hashem (#).

andunix
źródło
Jeśli nie używasz vi jako domyślnego edytora, możesz „wymusić” użycie vi podobnego EDITOR=vi; crontab -e, a następnie możesz użyć powyższej sztuczki.
Betlista,
2
Aby :%s/^#//
anulować
3

Nie był zadowolony z powyższych opcji, ponieważ nie były to jedne linijki.

Wyłączyć crontab -l | perl -nle 's/^([^#])/# $1/;print' | crontab

Umożliwić crontab -l | perl -nle 's/^#\s*([0-9*])/$1/;print' | crontab

przykład użycia (edytowany, aby pokazać, że nie wyłącza komentarzy)

$ 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

Przetestowałem to na RHEL i AIX, i powinien działać od razu po instalacji, bez potrzeby instalowania czegokolwiek

segaps
źródło
1
Również może szukać konkretnych szczegółów w cronjob crontab -l | perl -nle 's / ^ # \ s * ([0-1 *]) / $ 1 /; print if /.+mytexttofind.+/'
Jason
Czy możesz wyjaśnić, dlaczego nie ma to wpływu na komentarze? Jakiego wzoru używasz do ich wykrycia?
Sopalajo de Arrierez
Hm, pod Debianem Jessie pojawia się następujący błąd: crontab: usage error: file name must be specified for replace. Wygląda na to, że musisz określić plik (?), Jeśli używasz go crontabbez żadnych parametrów (co jest replacedomyślnie).
fritzmg
2

W moich ograniczonych testach ustawienie powłoki na / bin / false działa. Nadal zobaczysz /opt/job.shwykonywanie w dziennikach, ale będzie to noop:

SHELL=/bin/false

*/1 * * * *    root  /some/job.sh
popiół
źródło
1

W każdym znanym mi systemie Unix / Linux:

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

To:

  • wyłącza crontabs wszystkich użytkowników
  • ale nie system / etc / crontab (/etc/cron.daily. itp.)
  • utrzymuje się po ponownym uruchomieniu
  • jest jednowarstwowy, duh :)
kubańczyk
źródło
1

Pomysł zaczerpnąłem z odpowiedzi udzielonej przez @segaps

Wyłączyć:

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

Umożliwić:

crontab -l | cut -c 3- | crontab

Jedynym problemem związanym z rozwiązaniem dostarczanym przez segaps jest to, że odkomentuje zadania, które zostały już skomentowane przez użytkownika.

Sarvsav Sharma
źródło
0

Aby to zrobić, używając nano jako edytora:

sudo env EDITOR=nano crontab -e

następnie skomentuj każdą linię, której nie chcesz uruchamiać z #

Sam Smith
źródło