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


68

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

Odpowiedzi:


61

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


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

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

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 (#).


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


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

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 :)

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.


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 #

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.