Jak mogę zobaczyć / zatrzymać bieżące zadania crontab?

20
  1. Jak mogę zobaczyć zadania crontab, które są w toku?
  2. Jak ręcznie zatrzymać trwające zadania Crontab?

Czy [to] pytanie dotyczy bieżących uruchomionych procesów cron?

tak

Aby ręcznie zabić proces, jednym ze sposobów jest użycie pkill

Myślałem o pkill / killall, ale niektóre z moich poleceń w pliku crontab są odpowiednio! oznacza to, że po zakończeniu polecenia zostanie uruchomione następne! na przykład:

sudo crontab -e
00 10 * * * /usr/bin/wget LINK ; shutdown -h now

Więc jeśli zabiję wget, komputer zostanie wyłączony !!! -> Chcę całkowicie zabić zadanie crona, a nie jego część!

Następny pkillproblem: co ze skryptami? (Zaimportowałem kilka skryptów bash do crontab -e) ->sudo pkill ???

mini
źródło
Czy masz pytanie dotyczące bieżących uruchomionych procesów cron? lub lista zadań cron? Edytuj swoje pytanie, aby było bardziej jasne na ten temat. Aby zatrzymać bieżącą pracę crona, przejdź ( askubuntu.com/q/272419/66980 )
Mohammad Etemaddar
Edytowane; 1. tak, oglądasz aktualnie uruchomione procesy cron? (Chcę przenieść procesy na pierwszy plan); 2. Czy chcę to zatrzymać ręcznie ?! (nie z harmonogramu crontab)
mini
Najlepszym sposobem na dodanie dodatkowych informacji do pytania jest ich edycja za pomocą przycisku edycji . Jest to lepiej widoczne w ten sposób, a komentarze są głównie do celów wtórnych, tymczasowych. Komentarze są usuwane w różnych okolicznościach. Wszystko, co ważne dla twojego pytania, powinno znajdować się w samym pytaniu.
guntbert

Odpowiedzi:

42

Po pierwsze, użyj tylko jednego polecenia w wierszu w crontab. Zmień tę linię crontab:

00 10 * * * /usr/bin/wget LINK ; shutdown -h now

więc wygląda to tak:

00 10 * * * /path/to/my/crontab/script1.sh

i twórz /path/to/my/crontab/script1.shz tej zawartości:

#!/bin/bash
/usr/bin/wget LINK
shutdown -h now

Oczywiście nie zapomnij dać zezwolenia na wykonanie:

chmod +x /path/to/my/crontab/script1.sh

Po drugie, możesz zobaczyć uruchamianie zadań crontab, w użytecznym i czytelnym formacie, w wynikach:

ps -o pid,sess,cmd afx | egrep -A20 "( |/)cron( -f)?$"

Pojawią się w pierwszych wierszach, mniej więcej tak:

1108  1108 cron
4288  1108 \_ CRON
4289  4289     \_ /bin/sh -c /path/to/my/crontab/script1.sh
4290  4289         \_ /bin/bash /path/to/my/crontab/script1.sh
4295  4289             \_ /usr/bin/wget LINK

Pierwsza kolumna to PID, druga to identyfikator sesji, a trzecia to komenda uruchomiona przez crona. Możesz zabić wszystkie procesy związane z konkretnym zadaniem cron przy użyciu identyfikatora sesji, więc w powyższym przykładzie powinieneś zabić identyfikator sesji 4289:

pkill -s 4289
Eric Carvalho
źródło
1
Rozumiem to po uruchomieniu polecenia „Uruchamianie zadań crontab”:sh ps: cmd: keyword not found ps: illegal argument: afx
AlecRust
więc cron nie daje „praktycznego” sposobu na pokazanie swoich procesów?
Cirelli94,
@alecrust: Spróbuj tegops -o pid,sess,cmd -afx | egrep "( |/)cron( -f)?$"
Bulrush,
0

Aby ręcznie zabić proces, jednym ze sposobów jest użycie pkill. pkill zatrzyma wszystkie procesy, które mają następujący wzorzec w nazwie. na przykład, aby zatrzymać wszystkie procesy wget, użyj:

sudo pkill wget
Mohammad Etemaddar
źródło
Myślałem o pkill / killall, ale niektóre z moich poleceń w pliku crontab są odpowiednio! oznacza to, że po zakończeniu polecenia zostanie uruchomione następne! na przykład: sudo crontab -e=> 00 10 * * * /usr/bin/wget LINK ; shutdown -h now=> Więc jeśli zabiję wget , komputer zostanie wyłączony !!! -> Chcę całkowicie zabić zadanie crona, a nie jego część! następny problem z pkill: A co ze skryptami? (Zaimportowałem kilka skryptów bash do crontab -e) ->sudo pkill ???
mini
0

zmień swój cronjob w ten sposób

00 10 * * * /usr/bin/wget LINK && shutdown -h now

Powinno to działać, ponieważ &&oznacza to, że drugie polecenie zostanie wykonane tylko wtedy, gdy pierwsze zostało poprawnie wykonane (zwracanie statusu 0 do konsoli / systemu), co nie powinno mieć miejsca (ponieważ proces został zabity przez użytkownika i powinien zwrócić inną wartość niż 0).

s1mmel
źródło