Saya bertanya-tanya apakah seseorang mungkin mengarahkan saya ke arah yang benar. Saya memiliki sedikit pengalaman bekerja dengan baris perintah Linux dan baru-baru ini karena berbagai faktor dalam pekerjaan saya diminta untuk mendapatkan pengetahuan.
Pada dasarnya saya memiliki dua php
skrip yang berada di direktori di server saya. Untuk keperluan aplikasi, skrip ini harus terus berjalan. Saat ini saya menerapkannya dengan cara ini:
nohup sh -c 'while true; do php get_tweets.php; done' >/dev/null &
dan
nohup sh -c 'while true; do php parse_tweets.php; done' >/dev/null &
Namun, saya perhatikan bahwa meskipun infinte loop skrip berhenti secara berkala dan saya terpaksa memulai kembali. Saya tidak yakin mengapa tetapi mereka melakukannya. Itu membuat saya melihat ke dalam prospek CRON
pekerjaan yang memeriksa apakah mereka berjalan dan jika tidak, jalankan/restart mereka.
Adakah yang bisa memberi saya beberapa informasi tentang cara melakukan ini?
Jawaban yang Diterima:
Saya ingin memperluas jawaban Davidann karena Anda baru mengenal konsep pekerjaan cron. Setiap sistem UNIX atau Linux memiliki crontab yang disimpan di suatu tempat. Crontab adalah file teks biasa. Pertimbangkan hal berikut:(Dari Wiki Gentoo di Cron)
#Mins Hours Days Months Day of the week
10 3 1 1 * /bin/echo "I don't really like cron"
30 16 * 1,2 * /bin/echo "I like cron a little"
* * * 1-12/2 * /bin/echo "I really like cron"
Crontab ini harus menggemakan "Saya sangat menyukai cron" setiap menit setiap
jam setiap hari setiap bulan. Jelas Anda hanya akan melakukannya
jika Anda benar-benar menyukai cron. Crontab juga akan menggemakan "Saya suka cron a
little" pada pukul 16:30 setiap hari di bulan Januari dan Februari. Ini juga akan bergema
“Saya tidak terlalu suka cron” pada pukul 3:10 tanggal 1 Januari.
Karena baru mengenal cron, Anda mungkin ingin mengomentari kolom yang berkilau bintangnya sehingga Anda tahu untuk apa setiap kolom digunakan. Setiap implementasi Cron yang saya tahu selalu urutan ini. Sekarang gabungkan jawaban Davidann dengan file komentar saya:
#Mins Hours Days Months Day of week
* * * * * lockfile -r 0 /tmp/the.lock && php parse_tweets.php; rm -f /tmp/the.lock
* * * * * lockfile -r 0 /tmp/the.lock &&php get_tweets.php; rm -f /tmp/the.lock
Tidak menempatkan nilai di setiap kolom secara default ke:
Setiap Menit Setiap Jam Setiap Hari Setiap Bulan Sepanjang Minggu, -> Setiap Menit Sepanjang Tahun.
Seperti yang dinyatakan Davidann menggunakan lockfile memastikan bahwa hanya satu salinan juru bahasa php yang berjalan, php parse_tweets.php
adalah perintah untuk "menjalankan" file, dan bit terakhir dari baris akan menghapus file kunci untuk bersiap-siap untuk menjalankan berikutnya. Saya tidak suka menghapus file setiap menit, tetapi jika ini adalah perilaku yang Anda butuhkan, ini sangat dapat diterima. Menulis dan Menulis Ulang ke disk hanyalah preferensi pribadi