jak tymczasowo wyłączyć cronjobs użytkownika?

14

Jak tymczasowo wyłączyć jedno lub więcej zadań cron użytkowników? W szczególności nie chcę zawieszać praw crona użytkownika - po prostu nie zwalniam żadnego z jego zadań.

Jestem na systemach SLES 11 SP2 i SP3

Dinesh
źródło
Czy nie możesz po prostu użyć -u userprzełącznika crontabpolecenia i umieścić znak #komentarza przed zadaniami, aby wyłączyć dla danego użytkownika?
Janis,
@Janis muszę wtedy śledzić to, co użytkownik już skomentował (jest ich wielu), a ponadto użytkownik może dodać coś innego (nie dodam ich do /etc/cron.deny). Zbyt dużo pracy ręcznej :(
Dinesh
Dinesh, (błędnie) zrozumiałem, że chcesz precyzyjnej kontroli tego, co wyłączasz.
Janis

Odpowiedzi:

10

touch /var/spool/cron/crontabs/$username; chmod 0 /var/spool/cron/crontabs/$usernamepowinien załatwić sprawę. Przywróć za pomocą chmod 600i touch(musisz zmienić mtime pliku, aby cron (próbował) ponownie go załadować).

Przynajmniej w Debianie i prawdopodobnie w ogóle z Vixie cron, chmod 400 /var/spool/cron/crontabs/$usernamerobi to samo, ponieważ implementacja nalega, aby uprawnienia wynosiły dokładnie 600. Jednak trwa to tylko do momentu uruchomienia crontabpolecenia przez użytkownika.

Jeśli chcesz solidnego sposobu, nie sądzę, że jest coś lepszego niż tymczasowe usunięcie ich crontab z drogi lub zmiana uprawnień i tymczasowe dodanie ich do /etc/cron.deny.

Gilles „SO- przestań być zły”
źródło
Dzięki. W moim systemie jest to / var / spool / cron / tabs / $ nazwa użytkownika. Ale nadal działa, nawet po chmod.
Dinesh
Po zmianie perms pliku potrzebowałem również zatrzymać / zrestartować crona. Pomyślałem, że to prawdopodobnie dlatego, że cron może trzymać to w pamięci. Więc dodałem touch $usernamepo chmod. Ale to nie pomogło. (btw załatwiłeś sprawę cron.deny)
Dinesh
@Dinesh Rzeczywiście musisz zaktualizować plik mtime pliku, inaczej cron uważa, że ​​się nie zmienił i przechowuje informacje z pamięci podręcznej. Zauważyłem to podczas testów wczoraj, ale zapomniałem wspomnieć o tym w mojej odpowiedzi, przepraszam za to.
Gilles 'SO - przestań być zły'
Jeśli chcesz wyłączyć dla wszystkich standardowych użytkowników, po prostu:chgrp root /var/spool/cron/crontabs
shrimpwagon
9

Co powiesz na coś takiego, aby wyłączyć crontab użytkownika:

crontab -l -u [username] >/tmp/[username].cron.tmp
crontab -r -u [username]

i ponownie włączyć:

crontab -u [username] /tmp/[username].cron.tmp

Ma to tę dodatkową zaletę, że można go uruchomić jako ten użytkownik bez konieczności rootowania (wystarczy usunąć parametr -u).

braindigitalis
źródło
0

Jeśli używasz Debiana, dotyczy to tylko Debiana AFAIK :

Możesz to zrobić, dodając kropkę do nazwy kumpla.

Zachowanie jest opisane w oficjalnych dokumentach Debiana:

https://www.debian.org/doc/debian-policy/#cron-job-file-names

Nazwa pliku zadania cron nie może zawierać żadnych kropek ani znaków plus (. Lub +), ponieważ spowoduje to zignorowanie pliku przez crona. Zamiast tego należy użyć podkreślników (_). i + znaki.

Wadih M.
źródło
0

Jeśli chcesz po prostu croncałkowicie zatrzymać wszystkie zadania - na przykład wykonując konserwację systemu, z którą mogą źle oddziaływać - polecenia są zwykle

systemctl stop crond.service

i, aby wznowić

systemctl start crond.service

Zakładam, że potrzebujesz uprawnień roota lub koła, aby je wykonać; w razie potrzeby uruchom je za pomocą sudo lub (w ostateczności) zaloguj się jako root.

Przesada w przypadku konkretnego zadanego pytania, ale zapewnia „kompleksowe zakupy” i nie wymaga odtwarzania z systemem plików lub plikami tymczasowymi.

Felix Domestica
źródło
3
Ponieważ wyłącza to crona dla wszystkich użytkowników, tak naprawdę nie odpowiada na pytanie.
Scott,
-1

Zgadzam się, że ścieżka przez systemctl jest tą, którą należy obrać. Na malinie byłyby to polecenia

sudo systemctl stop cron.service
sudo systemctl start cron.service
Juergen
źródło
1
Spowoduje to zatrzymanie całej cronusługi. OP chciał mieć możliwość wyboru crontabs, które użytkownicy mają wyłączyć.
roaima,
1
Jest również identyczny z inną odpowiedzią.
roaima,