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ń.
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.
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:
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.
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.
-u user
przełącznikacrontab
polecenia i umieścić znak#
komentarza przed zadaniami, aby wyłączyć dla danego użytkownika?Odpowiedzi:
touch /var/spool/cron/crontabs/$username; chmod 0 /var/spool/cron/crontabs/$username
powinien załatwić sprawę. Przywróć za pomocąchmod 600
itouch
(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/$username
robi to samo, ponieważ implementacja nalega, aby uprawnienia wynosiły dokładnie 600. Jednak trwa to tylko do momentu uruchomieniacrontab
polecenia 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
.źródło
chmod
.touch $username
pochmod
. Ale to nie pomogło. (btw załatwiłeś sprawęcron.deny
)chgrp root /var/spool/cron/crontabs
Co powiesz na coś takiego, aby wyłączyć crontab użytkownika:
i ponownie włączyć:
Ma to tę dodatkową zaletę, że można go uruchomić jako ten użytkownik bez konieczności rootowania (wystarczy usunąć parametr -u).
źródło
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
źródło
Jeśli chcesz po prostu
cron
całkowicie zatrzymać wszystkie zadania - na przykład wykonując konserwację systemu, z którą mogą źle oddziaływać - polecenia są zwyklei, aby wznowić
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.
źródło
Zgadzam się, że ścieżka przez systemctl jest tą, którą należy obrać. Na malinie byłyby to polecenia
źródło
cron
usługi. OP chciał mieć możliwość wyboru crontabs, które użytkownicy mają wyłączyć.