Bagaimana Menjadualkan Tugas di Linux dengan Cron dan Crontab

Bagaimana Menjadualkan Tugas di Linux dengan Cron dan Crontab

Tahukah anda Pelari Blade ditetapkan pada tahun 2019? Itu tiga tahun dari sekarang! Tidak ketinggalan Kembali ke Masa Depan 2 , di mana mereka bergerak ke masa depan hingga tahun 2015. Namun kita tidak mempunyai kereta terbang dan tidak ada peniru di antara kita (sejauh yang saya tahu).





Mudah merasa kecewa dengan teknologi semasa apabila kita membandingkannya dengan penggambaran fiksyen masa depan. Namun, pada masa ini telefon, komputer, dan juga rumah kita dapat melakukan perkara yang luar biasa. Keupayaan untuk mengotomatisasi tugas adalah salah satunya.





Setiap pengguna Linux dapat memanfaatkan penjadualan tugas, sama ada berkaitan dengan sistem (seperti membersihkan log lama dan mengemas kini pakej atau melayani pengguna (memeriksa e-mel, memuat turun podcast ...). Pengguna Windows mempunyai Penjadual Tugas sejak Windows 95. Utiliti yang melakukan pekerjaan yang sama di Linux disebut cron, dan di sini kita akan menerangkan bagaimana menggunakannya.





cara membuka akaun paypal untuk menerima wang

Apa itu Cron?

Cron adalah perkhidmatan sistem yang berjalan di latar belakang, memeriksa tugas yang dijadualkan, dan melaksanakannya jika ada. Tugas - juga disebut 'cron jobs' - didefinisikan dalam fail konfigurasi khas (crontabs), yang cron scan setiap minit. Beberapa versi cron terdapat di sebaran Linux yang berbeza. Contohnya, garpu cron Fedora dipanggil cronie , dan ada juga fcron , bcron , dan dcron . Beberapa mempunyai ciri tambahan, sementara yang lain lebih menumpukan pada keselamatan, tetapi semuanya berdasarkan idea yang sama.

Panduan ini ditulis untuk vixie-cron, yang merupakan versi cron yang paling meluas dan yang anda akan dapati di Ubuntu dan turunannya. Walaupun kebanyakan arahan berlaku untuk implementasi cron lain juga, mungkin ada sedikit perbedaan, jadi periksa manualnya jika anda memutuskan untuk beralih.



Apa itu Crontab?

Sekiranya anda serius menguruskan masa, anda mungkin mempunyai kalendar - aplikasi atau sekurang-kurangnya sehelai kertas. Crontab sangat menyerupai kalendar komputer anda. Ini menyimpan maklumat mengenai tugas yang dijadualkan, memberitahu cron perintah mana yang harus dijalankan pada waktu apa.

Sebenarnya, beberapa crontab terdapat di sistem anda. Setiap pengguna mempunyai crontab mereka sendiri, termasuk root (pentadbir). Crontab pengguna disimpan di





/var/spool/cron/crontabs/

. The

crontab -l

arahan akan menyenaraikan fail crontab untuk pengguna semasa. Anda boleh memeriksa crontab root dengan





sudo crontab -l

.

Selain itu, terdapat fail crontab sistem

/etc/crontab

yang digunakan untuk tugas seluruh sistem. Biasanya, skrip ini berbentuk skrip yang boleh dilaksanakan dan diletakkan di dalamnya

/etc/cron.hourly/

,

/etc/cron.daily/

,

/etc/cron.weekly/

, dan

/etc/cron.monthly/

folder, dan pada sebilangan pengedaran,

/etc/cron.d/

folder juga. Secara umum, anda tidak perlu menangani tugas-tugas ini, kerana kebanyakannya dibuat secara automatik oleh aplikasi yang dipasang.

Bagaimana Menjadualkan Tugas dengan Cron

Kedengarannya mudah: untuk menjadualkan tugas, tambahkan saja ke crontab anda. Oleh kerana crontab adalah fail konfigurasi khas, tidak digalakkan mengeditnya secara manual. Sebaliknya, gunakan

crontab -e

arahan. Untuk mengedit root atau crontab pengguna lain, jalankan perintah dengan hak pentadbiran dan tambahkan nama pengguna mereka selepas pilihan -u:

sudo crontab -u root -e
sudo crontab -u username -e

Fail crontab mempunyai dua bahagian. Yang pertama mengandungi pemboleh ubah persekitaran yang disiapkan secara automatik. Anda boleh menukar pemboleh ubah PATH, HOME, dan SHELL dengan selamat, dan mengubah pemboleh ubah MAIL.

Bahagian kedua fail adalah 'jadual waktu' sebenar dengan tugas yang dijadualkan. Setiap tugas menempati garis (baris) dalam jadual, dengan lajur mewakili nilai berikut:

Untuk menjadualkan tugas dengan jayanya, anda perlu mengetahui sedikit mengenai sintaks crontab:

  • Nombor harus berupa bilangan bulat (nombor bulat), dan anda boleh menggunakan tanda bintang (*) di mana-mana lajur sebagai wildcard, yang bermaksud 'setiap minit / hari / bulan ...'.
  • Di lajur 'Hari Bulan', berhati-hati untuk tidak menetapkan tarikh yang tidak berlaku pada bulan yang ditentukan dalam lajur 'Bulan' (misalnya, 30 Februari).
  • Kedua-dua lajur 'Bulan' dan 'Hari Minggu' masing-masing menerima nama pendek untuk bulan dan hari, dan huruf tersebut tidak sensitif.
  • Di ruangan 'Hari Minggu', kedua-duanya 0 dan 7 bermaksud hari Ahad. Lajur 'Jam' memerlukan format 'masa ketenteraan' (24 jam), tetapi anda tidak boleh menggunakan angka 24 - sebaliknya, 0 bermaksud 12 pagi Ini kerana nilai untuk minit, jam dan hari bermula minggu pada 0 bukannya 1.
  • Detik tidak disokong, jadi anda tidak dapat menjadualkan tugas pada detik tertentu.

Apa yang boleh anda lakukan ialah menjadualkan julat waktu inklusif menggunakan tanda hubung (14-22 di bawah 'Jam' akan menjalankan tugas secara berterusan dari jam 2 hingga 10 malam), atau menjalankan satu tugas beberapa kali dengan menentukan senarai yang dipisahkan koma (1, 3,5 di bawah 'Hari Minggu' akan menjalankan tugas pada hari Isnin, Rabu, dan Jumaat).

Sementara itu, nilai langkah, ditunjukkan oleh garis miring ke depan (/), dan ini menunjukkan jumlah lompatan dalam julat; misalnya, 3-20 / 3 di bawah 'Jam' akan menjalankan tugas setiap tiga jam dari jam 3 pagi hingga 8 malam Ini berguna apabila anda ingin mengulang tugas setiap X jam, kerana anda dapat menggabungkan tanda bintang dan langkah (* / X). Anda boleh menggabungkan rentang dengan senarai dan langkah dengan rentang selagi anda menggunakan nombor. Dengan kata lain, kombinasi seperti 'jan-mar' atau 'Tue, Fri-Sun' tidak dibenarkan.

Sebagai alternatif, daripada menetapkan nilai untuk setiap lajur, anda hanya boleh menulis @weekly, @yearly, @monthly, @daily, atau @hourly pada awal baris, diikuti dengan perintah. Dijadualkan seperti ini, tugas akan dijalankan pada saat pertama mungkin, jadi @weekly akan dijalankan pada tengah malam pada hari pertama dalam seminggu. Sekiranya anda ingin menjalankan tugas dengan segera ketika sistem (re) dimulakan, gunakan perintah @reboot.

Dalam contoh ini, kami menjadualkan cadangan setiap hari pada jam 08:20 dan 20:20. Kertas dinding berubah secara automatik setiap tiga hari pada pukul 19:00, dan skrip akan memeriksa podcast baru setiap hari Isnin jam 10:20 dan 20:20. Peringatan hari lahir ditetapkan pada 25 Mac dan akan berlangsung setiap 30 minit dalam jangka masa yang ditentukan. Akhirnya, skrip memeriksa e-mel setiap 15 minit dari 8 hingga 20, tetapi hanya pada hari bekerja. Anda bebas mengatur crontab anda dengan ruang dan tab di antara lajur, tetapi tidak berada di dalamnya (jangan meletakkan ruang di antara koma, tanda hubung, dan garis miring).

Sekiranya semua ini terdengar terlalu rumit, jangan risau - anda sentiasa boleh bergantung pada internet. Alatan seperti Penjana Crontab , Crontab.guru , dan Corntab membantu anda membuat pekerjaan cron tanpa mengetahui sebarang sintaks crontab. Mereka menunjukkan kapan tugas akan dijalankan seterusnya, dan menyediakan templat untuk ungkapan yang biasa digunakan. Crontab.guru adalah yang terbaik kerana ia membolehkan anda menguji sintaks crontab secara langsung, jadi anda dapat segera melihat bagaimana perubahan anda akan mempengaruhi jadual.

Cara Memeriksa Sekiranya Pekerjaan Cron Dilaksanakan

Cron seharusnya berjalan dengan tenang di latar belakang dan membiarkan anda bekerja tanpa terganggu semasa menjalankan tugas anda. Tetapi bagaimana anda boleh memastikan ia berfungsi?

Cron mempunyai ciri pemberitahuan e-mel dalaman, tetapi ini memerlukan penyediaan sekurang-kurangnya pelayan mel tempatan yang mudah. Tidak banyak pengguna rumah yang bersedia mengkonfigurasi ini, dan tidak banyak pengedaran yang menyediakannya secara lalai (misalnya, Ubuntu tidak). Cara terpantas untuk memeriksa cron adalah dengan mengimbas log sistem dengan arahan ini:

cat /var/log/syslog | grep -i cron

Pilihan -i menjadikan pertanyaan kami tidak sensitif. Ada kemungkinan cron akan mempunyai fail lognya sendiri di suatu tempat

/var/log/

, jadi perhatikan di sana jika arahan ini gagal menghasilkan hasil yang berguna.

Sekiranya anda perlu menyimpan output dari pekerjaan cron tertentu, anda boleh mengarahkannya ke fail. Berikan jalan dan nama fail di lajur terakhir crontab anda, selepas arahan yang ingin anda jalankan:

30 * * * * /usr/bin/yourcommand > /home/username/logfile.txt

Menggunakan satu simbol> akan menimpa fail setiap kali arahan dijalankan. Untuk mengelakkan ini, gunakan >> sebagai gantinya - ia menambahkan output ke fail yang ada.

Bagaimana Sekiranya Cron Tidak Berfungsi?

Mungkin berlaku bahawa anda telah menambahkan beberapa tugas, memeriksa log sistem, dan mendapati bahawa mereka tidak melaksanakan sebagaimana mestinya. Berikut adalah beberapa perkara yang harus anda pertimbangkan - dan berhati-hati - semasa cuba menyelesaikan masalah.

Adakah perkhidmatan cron berjalan?

Seperti yang anda ketahui, daemon cron harus berjalan di latar belakang. Pastikan ini betul-betul berlaku. Perkhidmatan ini dipanggil crond atau cron.

Untuk pengedaran menggunakan systemd:

systemctl status cron

Untuk pengedaran menggunakan Permulaan:

service cron status

Sekiranya pengedaran anda menggunakan pendekatan init Sistem V 'lama', senaraikan semua perkhidmatan dengan:

cara mencari kata laluan wifi anda di android
initctl list

dan lihat apakah cron disenaraikan.

Adakah anda dibenarkan mempunyai fail crontab?

Periksa awak punya

/etc

folder untuk fail yang dinamakan

cron.allow

dan

cron.deny

. Di Ubuntu, kedua-duanya tidak boleh wujud, yang bermaksud semua pengguna dibenarkan untuk menguruskan pekerjaan cron. Walau bagaimanapun, sekiranya terdapat

bagaimana memastikan program berjalan dalam mod tidur 10
cron.allow

fail, ia mesti mengandungi nama pengguna anda. Sebaliknya, jika

cron.deny

fail ada, nama pengguna anda tidak boleh ada di dalamnya. Meninggalkan

cron.deny

fail kosong bermaksud hanya root dan pengguna yang disenaraikan di

cron.allow

boleh mempunyai fail crontab.

Adakah pemboleh ubah anda ditetapkan dengan betul?

Crontab secara automatik menetapkan pemboleh ubah SHELL anda ke

/bin/sh

. Walau bagaimanapun, sekiranya cengkerang pilihan anda adalah ikan atau bash, anda harus menukar pemboleh ubah SHELL

. Begitu juga, pemboleh ubah PATH hanya mengandungi beberapa direktori secara lalai. Di sinilah crontab mencari perintah Linux. Sekiranya tugas cron anda gagal dijalankan, mungkin kerana crontab tidak 'melihat' perintah yang telah anda gunakan. Untuk mengelakkan ini, tambahkan direktori yang mengandungi perintah ke pemboleh ubah PATH, dipisahkan oleh titik dua:

PATH = / opt / myapp / bin: / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin

Sekiranya anda tidak mahu mengedit ini di crontab anda, anda boleh menentukan pemboleh ubah ini dalam skrip yang ingin anda jalankan sebagai cron job.

Adakah format crontab anda tepat?

Sintaks crontab tidak betul-betul lancar. Walaupun anda mengesahkannya dengan alat dalam talian yang disebutkan sebelumnya, kesalahan kecil masih dapat mencegah cron menjalankan tugas anda. Berhati-hati untuk:

  • tambah baris kosong di hujung fail crontab
  • melepaskan tanda% dengan garis miring terbalik jika perintah anda menyertakannya
  • tulis komen sebagai baris berasingan bermula dengan #. Jangan menulis komen pada baris yang sama dengan pemboleh ubah persekitaran, atau di sebelah perintah kerja cron.

Adakah Anda Perlu Menggunakan Terminal?

Sama sekali tidak. Pengguna KDE dapat menjadualkan pekerjaan cron dengan KCron, yang dapat diakses dari Tetapan Sistem> Penjadual Tugas modul. Dengan antara muka yang mudah yang membolehkan anda memilih dan mengubah segalanya hanya dengan beberapa klik tetikus, KCron senang digunakan.

Sekiranya anda lebih suka GNOME, maka Jadual GNOME adalah untuk anda. Pendekatannya serupa, walaupun antara muka, diharapkan sedikit berbeza. Ia menawarkan mod lanjutan untuk pengubahsuaian halus, dan dilengkapi dengan applet panel dari mana anda dapat menguruskan tugas secara langsung.

Anda harus mengetahui penyelesaian lain seperti Crontab-UI dan Minikron . Mereka lebih sesuai untuk pengguna yang menguruskan banyak mesin dan pekerjaan cron, dan salah satu ciri paling hebat mereka adalah antara muka berasaskan web.

Adakah Terdapat Alternatif Cron?

Walaupun cron adalah penjadual tugas biasa untuk Linux, itu bukan satu-satunya. The pada perintah sangat sesuai untuk pekerjaan cepat dan sekali yang dapat dijadualkan langsung dari baris perintah, tanpa fail konfigurasi khas. Sekiranya anda memerlukan lebih banyak, ada Kumpulan GNU , yang memperkenalkan konsep ketergantungan. Dengan GNUbatch, anda dapat menetapkan syarat khusus untuk setiap pekerjaan, atau membuat tugas yang dijadualkan bergantung pada tugas sebelumnya. Sesuatu yang serupa dapat dicapai dengan pemasa sistem . Walaupun kurang praktikal untuk dikonfigurasi daripada cron, pemasa sistemd dapat mengingati jika tugas melepasi jadualnya semasa komputer dimatikan, dan jalankannya pada waktu seterusnya.

Ini adalah sesuatu yang tidak dapat dilakukan sendiri oleh cron. Oleh itu, ini sesuai untuk pelayan dan komputer yang terus berjalan, tetapi ia tidak akan menjalankan tugas yang dijadualkan semasa komputer dimatikan. Di sinilah dimana anakron mula bermain. Secara teknikalnya bukan 'alternatif' atau pengganti cron. Sebaliknya, anacron melengkapkan cron dan harus digunakan di sampingnya, seperti yang berlaku pada banyak pengedaran Linux, termasuk produk berasaskan Ubuntu dan Ubuntu. Anacron log ketika tugas terakhir dilaksanakan, dan memeriksa apakah ada kejadian yang terlewat semasa sistem dimatikan. Ia akan menjalankannya apabila anda menghidupkan komputer semula, tetapi setiap tugas dapat dilaksanakan hanya sekali sehari.

Sebilangan versi cron, seperti fcron, menawarkan ciri anacron secara lalai. Pengguna lanjutan mungkin ingin melihat Hcron atau SuperCron , yang membawa banyak peningkatan fungsi asas cron, tetapi juga agak sukar untuk dikendalikan.

Bagaimana dengan awak? Bagaimana anda mengatur tugas digital anda? Tugas mana yang anda jadualkan di Linux? Kongsi kisah dan petua anda untuk menggunakan cron dalam komen.

Kredit Gambar: papan jadual oleh Gonzalo Aragon melalui Shutterstock

Berkongsi Berkongsi Tweet E-mel 12 Laman Web Video Lebih Baik Daripada YouTube

Berikut adalah beberapa laman web alternatif untuk YouTube. Masing-masing menempati ceruk yang berbeza, tetapi bernilai menambah penanda halaman anda.

Baca Seterusnya
Topik-topik yang berkaitan
  • Linux
  • Linux
Mengenai Pengarang Ivana Isadora Devcic(24 Artikel Diterbitkan)

Ivana Isadora adalah penulis dan penterjemah bebas, pencinta Linux dan fangirl KDE. Dia menyokong dan mempromosikan perisian sumber bebas & terbuka, dan dia selalu mencari aplikasi baru dan inovatif. Ketahui cara untuk berhubung di sini .

Lagi Dari Ivana Isadora Devcic

Langgan buletin kami

Sertailah buletin kami untuk mendapatkan petua, ulasan, ebook percuma, dan tawaran eksklusif!

Klik di sini untuk melanggan