GNU/Linux >> Belajar Linux >  >> Linux

Menjadwalkan tugas sistem dengan Cron di Linux

Cron adalah daemon penjadwalan yang menjalankan tugas cron pada interval tertentu. Pekerjaan Cron mengotomatiskan pemeliharaan sistem, tugas-tugas administrasi atau berulang seperti database atau backup data, pembaruan sistem, memeriksa penggunaan ruang disk, mengirim email, dan sebagainya.

Anda dapat menjadwalkan tugas cron untuk dijalankan berdasarkan menit, jam, hari dalam seminggu, hari dalam sebulan, bulan, atau kombinasi dari semuanya.

Mengapa Cron?

  • Cron memberi Anda kendali saat pekerjaan atau tugas Anda berjalan. Misalnya, Anda dapat mengontrol menit eksekusi, jam, hari, dll.
  • Tugas cron tidak menempati memori saat tidak dijalankan.
  • Ini menghilangkan kebutuhan untuk menulis perulangan dan kode logika untuk tugas tersebut.
  • Jika suatu tugas gagal dijalankan karena suatu alasan, tugas itu akan dijalankan kembali pada interval waktu berikutnya.

Instal dan jalankan daemon cron

Utilitas cron di Linux diinstal dengan paket cronie yang menyediakan layanan cron.

Periksa apakah paket cronie sudah terinstal atau belum.

[tuts@fosslinux ~]$ rpm -q cronie
cronie-1.5.7-1.fc33.x86_64

Jika paket cronie tidak ada, instal menggunakan perintah berikut untuk pengguna Fedora.

[tuts@fosslinux ~]$ sudo dnf install cronie

Sebelum menjadwalkan tugas apa pun, Anda harus memulai layanan cron (cron daemon).

Periksa apakah layanan crond berjalan atau tidak.

[tuts@fosslinux ~]$ systemctl status crond.service
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor pre>
Active: active (running) since Tue 2021-06-08 09:14:40 EAT; 2h 58min ago
Main PID: 1671 (crond)
Tasks: 1 (limit: 3448)
Memory: 14.4M
CPU: 316ms
CGroup: /system.slice/crond.service
└─1671 /usr/sbin/crond -n

Layanan berjalan jika perintah menunjukkan ( Aktif:aktif (berjalan). Jika layanan crond tidak berjalan, mulai di sesi saat ini dengan perintah berikut.

[tuts@fosslinux ~]$ systemctl start crond.service

Anda juga dapat mengonfigurasi layanan untuk memulai dan berjalan secara otomatis saat boot dengan perintah berikut.

[tuts@fosslinux ~]$ systemctl enable crond.service

Anda dapat menghentikan layanan crond agar tidak berjalan menggunakan perintah stop.

[tuts@fosslinux ~]$ systemctl stop crond.service

Anda juga dapat memulai ulang lagi dengan perintah mulai ulang:

[tuts@fosslinux ~]$ systemctl restart crond.service

Mendefinisikan tugas cron

Untuk memahami cara kerja cron job, kita akan melihat contoh cron job dan bagian-bagian yang membentuk file konfigurasi crontab.
Contoh:Tugas cron untuk menarik perubahan terbaru dari cabang master git.

*/55 * * * *
username cd /home/username/project/shop_app && git pull origin master

Pekerjaan cron di atas terdiri dari dua bagian penting:

  1.  Bagian pertama (*/55 * * * * ) menyetel timer untuk dijalankan setiap 55 menit.
  2.  Bagian kedua dari konfigurasi tugas cron mendefinisikan pernyataan seperti yang akan dijalankan dari baris perintah. Perintah akan dijalankan sebagai pengguna (username) kemudian ubah direktori menjadi (/home/username/project/shop_app). Bagian terakhir akan menjalankan perintah git untuk menarik perubahan terbaru di cabang master proyek Anda.

Menggunakan crontab untuk membuat tugas cron

Sebagai aturan panduan, Anda tidak seharusnya mengedit file cron secara langsung. Sebagai gantinya, gunakan perintah crontab untuk membuat, mengedit, menginstal, menghapus instalasi, atau membuat daftar tugas cron yang berjalan di sistem Anda. Setelah Anda menentukan tugas cron, tugas tersebut akan berjalan di latar belakang, dan daemon akan terus-menerus memeriksa tugas cron baru di direktori /etc/crontab, /etc/cron.*/, dan /var/spool/cron/.

Distribusi berbasis RedHat seperti Fedora menyimpan file crontab di direktori /var/spool/cron, sedangkan distribusi Debian dan Ubuntu di /var/spool/cron/crontab direktori. File dan skrip crontab seluruh sistem disimpan di file etc/crontab dan direktori /etc/cron.d, masing-masing.

Perhatikan bahwa Anda tidak perlu memulai ulang cron setelah membuat file konfigurasi baru atau mengedit yang sudah ada.

Sintaks dan operator waktu crontab

Bagian pertama dari definisi cron job adalah informasi waktu. Ini menentukan kapan dan seberapa sering tugas cron akan dijalankan. Ini terdiri dari menit, jam, hari dalam sebulan, bulan, hari dalam seminggu dalam urutan itu. Anda dapat menentukan satu atau beberapa nilai yang dipisahkan dengan koma atau tanda hubung.

.---------------- minute (0 - 59)
| .------------- hour (0 - 23)
| | .---------- day of month (1 - 31)
| | | .------- month (1 - 12) OR jan,feb,mar,apr …
| | | | .---- day of week (0-6) (Sunday=0 or 7) OR sun,mon,tue,wed,thr,fri,sat
| | | | | 
| | | | | 
* * * * * username cron job command to be executed
  • * – Anda dapat menggunakan tanda bintang sebagai pengganti nilai untuk mewakili semua nilai yang mungkin untuk posisi tersebut saat menentukan waktu eksekusi. Misalnya, jika Anda menggunakan tanda bintang di posisi menit, tugas cron akan berjalan setiap menit.
  • – Sebuah koma menentukan daftar nilai untuk pengulangan. Misalnya, jika Anda menentukan 2, 3, 6 di bidang Jam, tugas cron akan berjalan pada pukul 2 pagi, 3 pagi, dan 6 pagi.
  • – – Tanda hubung menentukan rentang nilai. Misalnya, jika Anda memiliki 2-6 di bidang hari dalam seminggu, tugas cron akan berjalan setiap hari kerja dari Selasa hingga Sabtu.
  • / – Operator garis miring menentukan nilai yang akan diulang selama interval tertentu. Misalnya, */6 di bidang jam menunjukkan bahwa tugas cron akan dijalankan setiap enam jam. Ini mirip dengan menentukan 0,6,12,18.

Makro standar

Cron memiliki beberapa makro jadwal khusus yang dapat Anda gunakan untuk menentukan interval umum. Anda dapat menggunakannya sebagai pengganti spesifikasi tanggal dan waktu.

  • @reboot – Tugas yang ditentukan dijalankan saat startup sistem.
  •  @yearly atau @annually – Tugas yang ditentukan dijalankan setahun sekali pada tanggal 1 Januari di tengah malam. Ini mirip dengan 0 0 1 1 *.
  • @monthly – Tugas dijalankan sebulan sekali pada hari pertama bulan tersebut pada tengah malam. Ini mirip dengan 0 0 1 * *.
  • @weekly -Tugas yang ditentukan dijalankan seminggu sekali pada tengah malam pada hari Minggu. Ini setara dengan 0 0 * * 0.
  • @daily – Tugas yang ditentukan dijalankan sekali sehari pada tengah malam. Ini setara dengan 0 0 * * *.
  • @hourly – Tugas dijalankan satu jam sekali di awal jam. Ini mirip dengan 0 * * * *.

Perintah crontab

Perintah crontab memungkinkan Anda untuk menginstal, membuka, atau melihat file crontab.

Buat file crontab atau buka yang sudah ada dengan perintah berikut:

$ crontab -e

Perintah tersebut akan membuka editor vi secara default dan memungkinkan Anda untuk menentukan tugas cron yang ingin Anda jalankan di sistem Anda.

Daftar semua pekerjaan cron di sistem Anda dan tampilkan konten file crontab:

$ crontab -l

Buat daftar tugas cron untuk pengguna tertentu menggunakan opsi -u:

$ crontab -u username -l

Hapus semua tugas cron menggunakan perintah -r:

$ crontab -r

Hapus tugas cron untuk pengguna tertentu dengan perintah -r -u sebagai pengguna root:

$ crontab -r -u username

Hapus file crontab saat ini dengan perintah sebelum dihapus.

$ crontab -i

Variabel crontab

  •  PATH=/usr/bin:/bin adalah jalur crontab default. Namun, Anda dapat menentukan jalur ke perintah yang Anda jalankan atau mengubah variabel $PATH cron.
  • bin/sh adalah shell default.
  • Lingkungan MAILTO mendefinisikan pemilik crontab untuk mengirim pemberitahuan email. Anda dapat menambahkan variabel dengan daftar semua alamat email yang dipisahkan koma untuk menerima pemberitahuan email. Perhatikan bahwa tidak ada email yang akan dikirim jika variabel MAILTO kosong (mis., MAILTO=” “).

Contoh tugas Cron

Pekerjaan cron berikut akan berjalan setiap menit:

* * * * * [cron job command]

Pekerjaan cron berikut akan berjalan enam kali per jam, yaitu setiap 10 menit:

*/10 * * * * [cron job command]

Jalankan skrip setiap setengah jam dan arahkan output ke '/home/tuts/Documents':

[email protected]
*/30 * * * * /path/to/homescript.sh > /home/username/Documents

Gunakan operator &&untuk menjalankan dua perintah setiap hari Jumat pukul 8 pagi:

0 8 * * Fri commandA && commandB

Jalankan perintah sebulan sekali, pada hari kelima setiap bulan pada pukul 2:00:
( Yaitu 5 Maret 02:00, 5 April 02:00, 5 Desember 02:00, dst):

0 2 5 * * [cron job command]

Jalankan skrip pada pukul 10:30, pada tanggal 3 dan 23 setiap bulan:

30 10 3,23 * * /path/to/fosslinuxscript.sh

Gunakan perintah berikut untuk menyetel variabel HOME, PATH, SHELL, dan MAILTO khusus dan menjalankan perintah setiap menit.

HOME=/opt
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/usr/bin/zsh
[email protected]
*/1 * * * * [cron job command]

Kiat penjadwalan

Tugas menjadwalkan pekerjaan cron dapat menjadi tantangan dan menakutkan karena jumlah pekerjaan meningkat. Pekerjaan Cron yang berjalan pada saat yang sama, terutama di lingkungan produksi, dapat menimbulkan masalah kinerja yang serius. Misalnya, pencadangan dan kompilasi sistem yang dijalankan secara bersamaan menggunakan banyak sumber daya sistem, dan sistem Anda dapat kehabisan RAM. Salah satu cara untuk mengatasi tantangan seperti itu adalah dengan menjadwalkan tugas yang membutuhkan banyak sumber daya pada waktu yang berbeda dalam sehari, minggu, atau bulan. Anda juga dapat menambahkan lebih banyak memori ke sistem Anda atau menghapus tugas yang ditulis dengan buruk yang menggunakan banyak memori.

Tantangan lain muncul ketika komputer Anda dimatikan selama periode ketika tugas cron dijadwalkan untuk dijalankan. Akibatnya, tugas cron tidak akan berjalan sampai waktu berikutnya dijadwalkan untuk dijalankan. Ini mungkin menimbulkan masalah, terutama jika tugas cron sangat penting untuk sistem Anda. Untungnya, Linux menyediakan program anacron, yang memberi pengguna opsi untuk menjadwalkan pekerjaan cron secara berkala. Pelajari lebih lanjut dari halaman manual anakron.

Membatasi akses cron

Cron menyediakan cara untuk mengontrol pengguna sistem reguler mana yang memiliki akses ke perintah crontab. Ini berperan penting dalam membatasi kesalahan yang mungkin menyebabkan sumber daya sistem seperti memori dibanjiri. Untuk mencegah kemungkinan penyalahgunaan, gunakan file /etc/cron.deny dan /etc/cron.allow untuk mengontrol akses pengguna. Anda dapat menambahkan nama pengguna ke salah satu file untuk menolak atau mengizinkan akses.

Penting untuk membatasi akses ke tugas cron dan perintah crontab oleh pengguna non-root.

Kesimpulan

Cron adalah alat terutama untuk admin sistem tetapi juga relevan untuk banyak tugas pengguna. Misalnya, saya menggunakan cron untuk menjadwalkan tugas membosankan seperti pencadangan dan dalam aplikasi web.

Saya menemukan halaman manual cron, crontab, dan anacron bermanfaat dan banyak akal dengan informasi dan tips.


Linux
  1. Kiat Linux untuk menggunakan cron untuk menjadwalkan tugas

  2. Memahami panggilan sistem di Linux dengan strace

  3. Perintah Shutdown Linux (dengan Contoh)

  1. Menjadwalkan tugas dengan perintah cron Linux

  2. Pantau sistem Linux Anda di terminal Anda dengan procps-ng

  3. Tingkatkan kinerja sistem Linux dengan noatime

  1. Coba Linux di sistem operasi apa pun dengan VirtualBox

  2. Pengujian pena dengan alat keamanan Linux

  3. Cara Mengotomatiskan tugas di Linux menggunakan Crontab