Saya perlu menambahkan pekerjaan cron melalui skrip yang saya jalankan untuk mengatur server. Saat ini saya menggunakan Ubuntu. Saya dapat menggunakan crontab -e
tetapi itu akan membuka editor untuk mengedit crontab saat ini. Saya ingin melakukan ini secara terprogram.
Apakah mungkin untuk melakukannya?
Jawaban:
Pekerjaan Cron biasanya disimpan dalam file per pengguna di bawah
/var/spool/cron
Hal paling sederhana yang dapat Anda lakukan mungkin hanya membuat file teks dengan pekerjaan yang dikonfigurasi, kemudian salin ke folder spool cron dan pastikan memiliki izin yang tepat (600).
sumber
Berikut ini adalah satu-liner yang tidak menggunakan / memerlukan pekerjaan baru dalam file:
Ini
2>/dev/null
penting agar Anda tidak mendapatkanno crontab for username
pesan yang dihasilkan oleh beberapa * nixes jika saat ini tidak ada entri crontab.sumber
echo -e "$(sudo crontab -u root -l)\n* * * * * echo hello > /home/danny/temp.log 2>&1" | sudo crontab -u root -
Semoga ini bisa membantu seseorangUntuk crontab pengguna (termasuk root), Anda dapat melakukan sesuatu seperti:
di mana file bernama "nama file" berisi item untuk ditambahkan. Anda juga bisa melakukan manipulasi teks menggunakan
sed
atau alat lain di tempatcat
. Anda harus menggunakancrontab
perintah daripada langsung memodifikasi file.Operasi serupa adalah:
Jika Anda memodifikasi atau membuat crontab sistem, itu dapat dimanipulasi seperti yang Anda lakukan pada file teks biasa. Mereka disimpan dalam
/etc/cron.d
,/etc/cron.hourly
,/etc/cron.daily
,/etc/cron.weekly
,/etc/cron.monthly
direktori dan file/etc/crontab
dan/etc/anacrontab
.sumber
echo
), saya mendapat "crontab: kesalahan penggunaan: nama file harus ditentukan untuk diganti." Halaman manual Cron menunjukkan sintaksiscrontab [ -u user ] file
, yaitu, dengan nama file wajib. Apakah ada beberapa trik untuk mendapatkannya agar menerima data yang disalurkan?stdin
. Saya akan memperbaiki jawaban saya.Di Ubuntu dan banyak distro lainnya, Anda bisa memasukkan file ke
/etc/cron.d
direktori yang berisi satu baris dengan entri crontab yang valid . Tidak perlu menambahkan baris ke file yang ada.Jika Anda hanya perlu menjalankan sesuatu setiap hari, cukup masukkan file
/etc/cron.daily
. Demikian juga, Anda juga bisa drop file ke dalam/etc/cron.hourly
,/etc/cron.monthly
dan/etc/cron.weekly
.sumber
Jawaban yang lebih sederhana untuk pertanyaan Anda adalah:
Anda dapat mengatur cronjobs pada server jarak jauh seperti di bawah ini:
Di Linux, lokasi default
crontab
file adalah/var/spool/cron/
. Di sini Anda dapat menemukancrontab
file semua pengguna. Anda hanya perlu menambahkan entri cronjob Anda ke file masing-masing pengguna. Pada contoh di atas, file crontab pengguna root akan ditambahkan dengan cronjob untuk dijalankan/root/test.sh
setiap hari pada pukul 1 pagi.sumber
/var/spool/cron/crontabs/root
di Ubuntu.File crontab hanyalah file teks dan karena itu dapat diperlakukan seperti file teks lainnya. Tujuan dari
crontab
perintah ini adalah membuat pengeditan file crontab lebih aman. Ketika diedit melalui perintah ini, file diperiksa untuk kesalahan dan hanya disimpan jika tidak ada.crontab [path to file]
dapat digunakan untuk menentukan crontab yang disimpan dalam file. Seperticrontab -e
, ini hanya akan menginstal file jika bebas kesalahan.Oleh karena itu, skrip dapat secara langsung menulis file tab cron, atau menulisnya ke file sementara dan memuatnya dengan
crontab [path to temp file]
perintah. Menulis secara langsung menghemat harus menulis file sementara, tetapi juga menghindari pemeriksaan keamanan.sumber
crontab [path to file]
.. Ini jelas merupakan pilihan terbaik bagi saya, karena memungkinkan kode yang lebih mudah dibaca. Saya menggunakan crontab untuk melacak paket dan mengubah wallpaper desktop saya dengan status. Ketika saya tidak mengharapkan paket, tidak perlu memeriksa setiap jam. Itu sebabnya saya ingin skrip mengedit frekuensi cron secara otomatis.(Saya tidak memiliki cukup reputasi untuk berkomentar, jadi saya menambahkan sebagai jawaban: silakan menambahkannya sebagai komentar di samping jawabannya)
One-liner Joe Casadonte sempurna, kecuali jika Anda menjalankannya
set -e
, yaitu jika skrip Anda disetel untuk gagal karena kesalahan, dan jika belum ada cronjobs. Jika demikian, one-liner TIDAK akan membuat cronjob, tetapi TIDAK akan menghentikan skrip. Kegagalan diam bisa sangat menyesatkan.Alasannya adalah bahwa
crontab -l
kembali dengan1
kode kembali, menyebabkan perintah berikutnya (yangecho
) tidak dieksekusi ... dengan demikian cronjob tidak dibuat. Tetapi karena mereka dieksekusi sebagai subproses (karena tanda kurung) mereka tidak menghentikan skrip.(Menariknya, jika Anda menjalankan perintah yang sama lagi, itu akan bekerja: sekali Anda telah dieksekusi
crontab -
sekali,crontab -l
masih tidak menghasilkan apa-apa, tetapi tidak mengembalikan kesalahan lagi (Anda tidak mendapatkanno crontab for <user>
pesan lagi). Jadi selanjutnyaecho
dieksekusi dan crontab dibuat)Dalam kasus apa pun, jika Anda menjalankannya
set -e
, garis harus:sumber
Sebagai koreksi bagi mereka yang menyarankan
crontab -l | crontab -
: Ini tidak bekerja pada setiap sistem. Sebagai contoh, saya harus menambahkan pekerjaan ke root crontab pada lusinan server yang menjalankan SUSE versi lama (jangan tanya kenapa). SUSEs lama menambahkan baris komentar ke outputcrontab -l
, menjadikancrontab -l | crontab -
non-idempoten (Debian mengenali masalah ini di manual crontab dan menambal versi Vixie Cron untuk mengubah perilaku defaultcrontab -l
).Untuk mengedit crontab secara terprogram pada sistem tempat
crontab -l
menambahkan komentar, Anda dapat mencoba yang berikut:EDITOR=cat crontab -e > old_crontab; cat old_crontab new_job | crontab -
EDITOR=cat
memberitahu crontab untuk digunakancat
sebagai editor (bukan vi standar yang biasa), yang tidak mengubah file, tetapi menyalinnya ke stdout. Ini mungkin masih gagal jikacrontab -
mengharapkan input dalam format yang berbeda daricrontab -e
output apa . Jangan mencoba mengganti finalcrontab -
dengancrontab -e
- itu tidak akan berhasil.sumber
Yah
/etc/crontab
hanya file ascii jadi yang paling sederhana adalah hanyayang akan menambah pekerjaan yang akan mengirimi Anda email setiap 15 menit. Sesuaikan dengan selera, dan uji melalui
grep
atau lainnya berarti apakah baris sudah ditambahkan untuk membuat skrip idempoten.Di Ubuntu et al, Anda juga dapat meletakkan file
/etc/cron.*
yang lebih mudah dilakukan dan diuji --- plus Anda tidak mengacaukan file konfigurasi (sistem) seperti/etc/crontab
.sumber
crond
ini memantau, dan tentu saja pada platform OP lain.Berikut adalah cara memodifikasi cron entri tanpa secara langsung mengedit file cron (yang disukai).
Jika Anda ingin menghapus entri cron, gunakan ini:
Saya menyadari ini bukan apa yang diminta gaurav, tetapi mengapa tidak memiliki semua solusi di satu tempat?
sumber
Saya telah menulis alat penyebaran crontab dengan python: https://github.com/monklof/deploycron
Instal crontab Anda sangat mudah, ini akan menggabungkan crontab ke dalam sistem crontab yang ada.
sumber
Ini adalah pendekatan untuk menambahkan tugas cron secara bertahap:
sumber