Saya menjalankan perintah berikut setiap 5 menit di crontab saya untuk menjaga agar Penumpang Phusion tetap hidup.
*/5 * * * * wget mysite.com > /dev/null 2>&1
Ketika saya menjalankan ini melakukan wget di url situs rute STDOUT / STDERR ke / dev / null. Ketika saya menjalankan ini dari baris perintah berfungsi dengan baik dan tidak menghasilkan file index.html di direktori home saya.
Ketika dijalankan dari cron, ia menciptakan file index.html baru setiap lima menit, meninggalkan saya dengan satu ton file indeks yang tidak saya inginkan.
Apakah sintaksis saya salah untuk menjalankan pekerjaan cron? Dari baris perintah berfungsi tanpa masalah tetapi dari cron menghasilkan file index.html di direktori home saya.
Saya yakin saya membuat kesalahan sederhana, akan sangat menghargai jika ada yang bisa membantu.
wget
dari terminal dan sebaliknya adalah apakah bilah kemajuan ditampilkan.Jawaban:
Anda bisa melakukannya seperti ini:
Di sini
-O
mengirim file yang diunduh ke/dev/null
dan-o
log ke/dev/null
bukan stderr. Dengan demikian pengalihan tidak diperlukan sama sekali.sumber
Apakah Anda perlu mengunduh isinya atau hanya menerima 200 OK? Jika Anda hanya perlu meminta server untuk memproses, mengapa tidak menggunakan
--spider
argumen saja?sumber
Saya akan menggunakan yang berikut ini:
The
-O -
pilihan memastikan bahwa konten diambil adalah mengirim ke stdout.sumber
foo > /dev/null 2>&1
lebih ringkas ditulis sebagaifoo &> /dev/null
.bash
. Dish
, yang biasanya digunakan cron, pengalihan ampersand tidak berfungsi.Anda mengatakan Anda hanya perlu respons "200 OK" dalam komentar.
Itu memungkinkan solusi dengan beberapa keunggulan tambahan dibandingkan dengan
wget -O /dev/null -o /dev/null example.com
. Idenya bukan untuk membuang output dengan cara tertentu, tetapi tidak membuat output sama sekali.Bahwa Anda hanya memerlukan respons berarti data yang diunduh ke file index.html lokal tidak perlu diunduh terlebih dahulu.
Dalam protokol HTTP, perintah 'GET' digunakan untuk mengunduh dokumen . Untuk mengakses dokumen dengan cara yang melakukan segalanya kecuali benar-benar mengunduh dokumen, ada perintah khusus 'KEPALA'.
Saat menggunakan 'GET' untuk tugas ini, dokumen diunduh dan dibuang secara lokal. Menggunakan 'KEPALA' tidak hanya apa yang Anda butuhkan, itu tidak mentransfer dokumen di tempat pertama. Ini akan selalu mengembalikan kode hasil yang sama seperti 'GET', menurut definisi.
Sintaks untuk menggunakan metode
HEAD
denganwget
sedikit aneh: kita perlu menggunakan opsi--spider
. Dalam konteks ini, ia hanya melakukan apa yang kita inginkan - mengakses URL dengan 'KEPALA' bukan 'GET'.Kita dapat menggunakan opsi
-q
(diam) untukwget
tidak menampilkan detail tentang apa yang dilakukannya.Menggabungkannya,
wget
tidak akan menghasilkan apa pun untuk stderr, atau menyimpan dokumen.wget -q --spider 'http://example.com/'
Kode keluar memberi tahu kami apakah permintaan berhasil atau tidak:
Untuk perintah dalam
crontab
, fakta bahwa tidak ada output dalam kedua kasus berarti Anda dapat menggunakan tidak mendapatkan output sebagai indikasi kesalahan lagi.Contoh perintah Anda akan diubah menjadi ini:
Ini memiliki kelebihan yang sama dengan
wget -O /dev/null -o /dev/null example.com
. Keuntungan tambahan adalah bahwa output log, dan output dokumen, tidak dihasilkan, bukan dihasilkan dan dibuang secara lokal. Atau tentu saja perbedaan besar adalah menghindari mengunduh dan kemudian membuang dokumenindex.html
,.sumber
Mungkin pertanyaan Anda seharusnya tentang ini, halaman web mengatakan:
Ini seharusnya tidak memerlukan skrip keepalive.
Kalau tidak, solusi kasperd sempurna.
sumber
wget
perintah. Dalam banyak situasi, kebutuhan untuk menjaga pesan tetap hidup adalah gejala cacat desain yang mendasarinya yang harus diperbaiki. Tetapi bahkan jika semua itu diperbaiki, masih akan ada beberapa kasus di mana pesan tetap hidup adalah solusi yang tepat. Bahkan jika menjaga pesan tetap tidak diperlukan, pekerjaan cron masih bisa menjadi bagian yang berguna dari pengaturan pemantauan.