GNU/Linux >> Belajar Linux >  >> Linux

Bisakah saya menjalankan tugas cron lebih sering dari setiap menit?

Solusi 1:

Kandidat untuk paling kreatif penyalahgunaan dari perintah Linux:

nohup watch -n 30 --precise yourprog >/dev/null &

Jika yourprog terdiri dari:

date +%M.%S.%N >> yourprog.out

lalu yourprog.out mungkin terlihat seperti:

50.51.857291267
51.21.840818353
51.51.840910204
52.21.840513307
52.51.842455224
53.21.841195858
53.51.841407587
54.21.840629676

menunjukkan tingkat presisi yang cukup baik.

Berikut penjelasan bagian-bagian dari perintah tersebut:

  • nohup - Ini menyimpan perintah yang mengikutinya, watch dalam hal ini, dari keluar saat terminal keluar.
  • watch - Program ini menjalankan perintah berulang kali. Biasanya tampilan pertama output dari perintah ditampilkan setiap kali watch menjalankan perintah.
  • -n 30 - Interval untuk menjalankan perintah. Dalam hal ini setiap tiga puluh detik.
  • --precise - Tanpa opsi ini, watch menjalankan perintah setelah interval detik. Dengan itu, setiap permulaan perintah dimulai aktif interval jika memungkinkan. Jika opsi ini tidak ditentukan dalam contoh, waktunya akan bertambah lebih dari 30 detik setiap kali karena waktu yang diperlukan untuk meluncurkan dan menjalankan perintah (yourprog ).
  • yourprog - Program atau baris perintah untuk watch untuk mengeksekusi. Jika baris perintah berisi karakter khusus untuk shell (mis. spasi atau titik koma), maka perlu dikutip.
  • >/dev/null - Lebih besar dari mengalihkan output dari perintah yang dijalankan oleh watch ke file, /dev/null . File itu membuang data apa pun yang ditulis padanya. Ini mencegah keluaran ditulis ke layar atau, sejak nohup sedang digunakan, ini mencegah output dikirim ke file bernama nohup.out .
  • & - watch perintah dijalankan di latar belakang dan kontrol dikembalikan ke terminal atau proses induk.

Perhatikan bahwa nohup , pengalihan output dan & operator kontrol latar belakang tidak khusus untuk watch .

Berikut penjelasan dari contoh yourprog skrip:

  • date - Mengeluarkan tanggal dan/atau waktu saat ini. Itu juga dapat mengaturnya.
  • +%M.%S.%N - Ini menentukan format keluaran untuk date menggunakan. %M adalah menit saat ini, %S adalah detik saat ini dan %N adalah nanodetik saat ini.
  • >> yourprog.out - Ini mengalihkan output dari date perintah ke file bernama yourprog.out . Ganda lebih besar dari menyebabkan output ditambahkan ke file pada setiap pemanggilan daripada konten sebelumnya yang ditimpa.

Edit :

Mungkin hal lain yang dapat disalahgunakan (atau mungkin penggunaan yang sah) adalah penghitung waktu sistem.

Lihat systemd/Timers sebagai pengganti cron dan timer Cron vs systemd.

Saya akan mencoba memposting contoh segera.

Solusi 2:

Jika tugas Anda harus sering dijalankan, cron adalah alat yang salah. Selain fakta bahwa itu tidak akan meluncurkan pekerjaan sesering itu, Anda juga berisiko mengalami beberapa masalah serius jika pekerjaan membutuhkan waktu lebih lama untuk dijalankan daripada interval antara peluncuran. Tulis ulang tugas Anda untuk melakukan daemonisasi dan jalankan terus-menerus, lalu luncurkan dari cron jika perlu (sambil memastikan bahwa tugas tidak akan diluncurkan kembali jika sudah berjalan).

Solusi 3:

Cron dirancang untuk bangun setiap menit, jadi tidak mungkin melakukannya tanpa peretasan, misalnya tidur seperti yang Anda sebutkan.

Solusi 4:

* * * * * /path/to/program
* * * * * sleep 30; /path/to/program

Jangan lupa untuk menulis sesuatu ke dalam program Anda agar keluar jika instance sebelumnya sudah berjalan.

#!/bin/sh

if ln -s "pid=$$" /var/pid/myscript.pid; then
  trap "rm /var/pid/myscript.pid" 0 1 2 3 15
else
  echo "Already running, or stale lockfile." >&2
  exit 1
fi

Tentu saja, ini masih menyisakan peluang kegagalan yang sangat kecil, jadi telusuri Google untuk solusi yang lebih baik yang dapat diterapkan di lingkungan Anda.

Solusi 5:

Anda dapat melakukannya dengan perangkat lunak pihak ketiga.

Opsi yang bekerja dengan baik untuk saya adalah frequent-cron

Ini memungkinkan presisi milidetik dan memberi Anda opsi untuk menunda eksekusi berikutnya hingga eksekusi saat ini selesai..


Linux
  1. Bagaimana Memberitahu Cron Untuk Menjalankan Perintah Setiap Hari (Ganjil/Genap)?

  2. Menjalankan tugas cron di Linux setiap enam jam

  3. Linux:Jalankan tugas cron di latar depan

  1. Cara menjalankan tugas cron setiap satu jam dan 10 menit

  2. Bagaimana cara mengatur pekerjaan CRON agar berjalan setiap 10 detik di Linux?

  3. Mengapa pekerjaan cron.d per menit saya tidak berjalan?

  1. Bagaimana saya bisa menjalankan perintah setelah boot?

  2. Menjalankan Cron setiap 2 jam

  3. bagaimana cara menjalankan cron job setiap 3 bulan?