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 kaliwatch
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 untukwatch
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 olehwatch
ke file,/dev/null
. File itu membuang data apa pun yang ditulis padanya. Ini mencegah keluaran ditulis ke layar atau, sejaknohup
sedang digunakan, ini mencegah output dikirim ke file bernamanohup.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 untukdate
menggunakan.%M
adalah menit saat ini,%S
adalah detik saat ini dan%N
adalah nanodetik saat ini.>> yourprog.out
- Ini mengalihkan output daridate
perintah ke file bernamayourprog.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..