Bagaimana saya bisa melihat / menghentikan tugas menjalankan crontab saat ini?

20
  1. Bagaimana saya bisa melihat tugas-tugas crontab yang sedang berlangsung?
  2. Bagaimana saya bisa menghentikan tugas-tugas crontab yang sedang berlangsung, secara manual?

Apakah [ini] pertanyaan tentang melihat proses cron yang sedang berjalan?

iya nih

Untuk mematikan proses secara manual, salah satu caranya adalah menggunakan pkill

Saya telah memikirkan pkill / killall, tetapi beberapa perintah saya di file crontab masing-masing! artinya setelah menyelesaikan perintah, perintah berikutnya akan dimulai! sebagai contoh:

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

Jadi, jika saya bunuh wget, komputer akan dimatikan !!! -> Saya ingin membunuh tugas cron sepenuhnya, bukan bagian dari itu!

Masalah selanjutnya pkill: Bagaimana dengan skrip? (Saya sudah mengimpor beberapa skrip bash ke crontab -e) ->sudo pkill ???

mini
sumber
Apakah pertanyaan Anda tentang melihat proses cron yang sedang berjalan? atau daftar cron-job? Harap edit pertanyaan Anda untuk lebih jelas tentang ini. Untuk menghentikan cron-job yang sedang berjalan, buka ( askubuntu.com/q/272419/66980 )
Mohammad Etemaddar
Diedit; 1. ya, menonton proses cron yang sedang berjalan? (Saya ingin membawa proses ke latar depan); 2. Lalu, saya ingin menghentikannya secara manual ?! (bukan dari jadwal crontab)
mini
Cara terbaik untuk menambahkan informasi tambahan ke pertanyaan Anda adalah dengan mengeditnya, dengan tombol edit . Terlihat lebih baik seperti itu, dan komentar terutama untuk tujuan sekunder sementara. Komentar dihapus dalam berbagai keadaan. Apa pun yang penting untuk pertanyaan Anda harus dalam pertanyaan itu sendiri.
guntbert

Jawaban:

42

Pertama, gunakan hanya satu perintah per baris di crontab. Ubah baris crontab ini:

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

jadi sepertinya:

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

dan buat /path/to/my/crontab/script1.shdengan konten ini:

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

Tentu saja, jangan lupa untuk memberikan izin eksekusi:

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

Kedua, Anda dapat melihat menjalankan tugas-tugas crontab, dalam format yang bermanfaat dan dapat dibaca, di output dari:

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

Mereka akan muncul di baris pertama, kira-kira seperti ini:

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

Kolom pertama adalah PID, kedua adalah Session ID dan ketiga adalah perintah yang dimulai oleh cron. Anda dapat mematikan semua proses yang terkait dengan tugas cron tertentu menggunakan ID Sesi, jadi dalam contoh di atas Anda harus membunuh Session ID 4289:

pkill -s 4289
Eric Carvalho
sumber
1
Saya mendapatkan ini ketika menjalankan perintah "menjalankan tugas crontab":sh ps: cmd: keyword not found ps: illegal argument: afx
AlecRust
jadi cron tidak memberikan cara "berguna" untuk menunjukkan prosesnya?
Cirelli94
@ alecrust: Coba inips -o pid,sess,cmd -afx | egrep "( |/)cron( -f)?$"
Bulrush
0

Untuk mematikan proses secara manual, salah satu caranya adalah menggunakan pkill. pkill akan menghentikan semua proses yang memiliki pola berikut dalam namanya. misalnya untuk menghentikan semua proses wget, gunakan:

sudo pkill wget
Mohammad Etemaddar
sumber
Saya telah memikirkan pkill / killall, tetapi beberapa perintah saya di file crontab masing-masing! artinya setelah menyelesaikan perintah, perintah berikutnya akan dimulai! misalnya: sudo crontab -e=> 00 10 * * * /usr/bin/wget LINK ; shutdown -h now=> Jadi, Jika saya membunuh wget , komputer akan dimatikan !!! -> Saya ingin membunuh tugas cron sepenuhnya, bukan bagian dari itu! masalah pkill berikutnya: Bagaimana dengan skrip? (Saya sudah mengimpor beberapa skrip bash ke crontab -e) ->sudo pkill ???
mini
0

ubah cronjob Anda seperti ini

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

Ini harus bekerja, karena &&berarti bahwa perintah kedua hanya dijalankan, ketika yang pertama selesai dengan benar (mengembalikan status 0 ke konsol / sistem), yang seharusnya tidak terjadi (karena proses terbunuh oleh pengguna dan seharusnya mengembalikan nilai lain dari 0).

s1mmel
sumber