Apa cara yang benar untuk mengedit file crontab?

52

Saya mencoba untuk mengotomatiskan penyegaran awstats untuk server web saya dan memahami bahwa saya perlu menggunakan cron untuk mengaturnya. Jadi setiap pengguna memiliki file crontab?

Saya mengikuti instruksi di sini community / AWStats

Dan dikatakan pergi ke file di: /etc/crontab

File itu sudah memiliki beberapa informasi di dalamnya. Apakah ini crontabfile utama atau semacamnya? Saya telah melihat beberapa instruksi online untuk menggunakan file yang muncul bersama crontab -e.

Apa file yang tepat untuk digunakan dan cara terbaik untuk melakukan ini?

Jika saya menjadwalkan tugas sebagai pengguna non-root saya, apakah itu akan berjalan dengan sendirinya pada interval waktu seperti yang ditentukan, tanpa masalah?

Apakah saya perlu memulai ulang server setelah menyimpan tugas cron di crontabfile sebelum mulai bekerja?

timbram
sumber

Jawaban:

50

Apa file yang tepat untuk digunakan dan cara terbaik untuk melakukan ini?

crontab -e adalah cara terbaik untuk melakukannya - ini akan memungkinkan Anda untuk mengedit crontab per pengguna dengan mudah.

Jika saya menjadwalkan tugas sebagai pengguna non-root saya, apakah itu akan berjalan dengan sendirinya pada interval waktu seperti yang ditentukan, tanpa masalah?

Ya, dan itu akan berjalan dengan hak istimewa dari akun pengguna itu.

Sebagai prinsip, yang terbaik adalah menjalankan tugas terjadwal dengan hak istimewa terendah yang bisa Anda dapatkan, jadi jika apa yang Anda lakukan tidak memerlukan root, jangan gunakan root. Jika Anda bahkan tidak perlu dapat mengakses file dan folder akun Anda , maka Anda dapat membuat pengguna baru dan menggunakan akun pengguna itu hanya untuk tugas itu. Di sisi lain jika tugas Anda memang membutuhkan root, gunakan crontab root ( su/ sudo suuntuk root lalu gunakan crontab -e).

Apakah saya perlu me-restart server setelah menyimpan pekerjaan cron di file crontab sebelum mulai bekerja?

Tidak, itu akan langsung bekerja (well, kemungkinan waktu berikutnya yang dijadwalkan)

Mengapa tidak mengedit file secara langsung? Di mana letaknya?

File crontab pengguna berada di /var/spool/cron/crontabs, tetapi izin mereka diatur sedemikian rupa sehingga mereka tidak dapat dilalui tanpa izin pengguna super (tapi begitu terbuka dan proses cron menjatuhkan hak istimewa itu masih dapat mengakses file).

Sistem ini tidak dirancang untuk pengguna akhir untuk mengedit file-file ini secara langsung, dan memang bagian atas file memiliki DO NOT EDIT THIS FILEperingatan keras di bagian atas untuk efek ini. File tersebut malah dirancang untuk diedit melalui crontab -eyang mengatur mirror sementara dari file dalam /tmpuntuk mengedit - tanpa peringatan keras - setelah itu memeriksa dan menginstal file crontab permanen itu sendiri. Ini semua bisa dilakukan tanpa izin pengguna super.

Jika Anda mengedit file crontab secara langsung, saya tidak tahu apa hasilnya. Mungkin itu tidak akan berlaku sampai restart berikutnya dan kesalahan mungkin sulit untuk di-debug.

thomasrutter
sumber
5
crontab -ememungkinkan Anda mengedit crontab pengguna Anda tanpa sudo. Crontab pengguna berada di /var/spool/cron/crontabsmana merupakan direktori yang tidak dapat diakses tanpa izin pengguna super (tetapi sedemikian rupa sehingga setelah cron menjatuhkan hak istimewa, ia masih dapat membacanya). Bahkan jika Anda menggunakan sudo untuk mencoba dan mengedit file secara langsung, Anda melihat peringatan besar di bagian atas, "JANGAN EDIT FILE INI" - file tersebut dirancang untuk diedit menggunakan crontabperintah yang menggunakan salinan sementara di /tmpkemudian instal setelah Anda simpan.
thomasrutter
25

Setiap pengguna memiliki itu sendiri crontab.

Untuk melihatnya ketik saja

crontab -l

dan, ya Anda sudah melihatnya dengan benar, ketika Anda ingin menambahkan crontabmaka lakukan saja

crontab -e

untuk pertama kalinya Anda akan ditanya tentang editor yang akan digunakan crontab. Karena Anda seorang pemula seperti yang Anda katakan, saya akan merekomendasikan untuk menggunakan nano, itu adalah editor paling sederhana untuk digunakan.

Crontab itu sendiri berfungsi seperti ini

MIN =  Minute 0-60
HOUR = Hour [24-hour clock] 0-23
MDAY = Day of Month 1-31
MON = Month 1-12 OR jan,feb,mar,apr ...
DOW =  Day of Week 0-6 OR sun,mon,tue,wed,thu,fri,sat
COMMAND = Command to be run Any valid command-line

Jadi mis. Untuk memicu pekerjaan setiap 15 menit hanya pada hari Senin, Anda melakukannya seperti itu

*/15 * * * mon /home/me/yourscript.sh

dan YA, sangat penting bagi Anda untuk memasukkan cronjob ke crontab pengguna yang memiliki hak yang cukup untuk menjalankannya.

Jadi jika skrip Anda perlu root atau pengguna khusus, pastikan untuk su ke pengguna itu dan tambahkan cronjob di sana.

Juga sangat penting!

cronjob bodoh! Ya saya mengatakannya. Selalu pastikan untuk memasukkan PATH lengkap ke yang application/command/scriptAnda gunakan, karena crontab tidak akan berfungsi .bashrcatau serupa. Anda selalu harus memastikan bahwa Anda memberi tahu cron di mana ia dapat menemukan file dan direktori.

Untuk menjawab sisa pertanyaan Anda:

Tentu saja itu akan berjalan sendiri, itulah gunanya. Tetapi Anda perlu memeriksa bahwa cronjob benar-benar melakukannya, atau jika ada yang hilang. Misalnya login ke file log untuk melihat apakah itu benar-benar berfungsi.

Dan TIDAK, restart tidak diperlukan. Restart dengan linux biasanya hanya diperlukan, jika Anda menginstal kernel baru. Untuk menggunakannya, Anda harus reboot. Hampir semuanya dapat dilakukan tanpa reboot di Linux. Tentu saja ada pengecualian, tetapi secara umum pernyataan ini benar.

s1mmel
sumber
untuk memeriksa Anda format waktu meninjau situs ini crontab.guru
ASTM