Crontab digunakan untuk mengotomatisasi semua jenis tugas di sistem Linux. Ini adalah keterampilan yang sangat penting untuk dipelajari oleh calon administrator sistem. Mungkin agak sulit untuk memulai jika Anda seorang pemula. Sintaksnya berbeda dari kebanyakan perintah lainnya. Untuk alasan ini, pelajaran ini akan menyertakan sedikit lebih banyak informasi latar belakang sebelum saya menunjukkan kepada Anda beberapa kegunaannya.
Jangan terintimidasi dengan crontab
Bagi saya, Crontab adalah salah satu konsep Linux yang lebih menakutkan sebagai pemula. Pada saat saya diperkenalkan dengan 'crontab', saya telah menggunakan baris perintah hanya beberapa hari dan hampir tidak mengerti bagaimana menggunakan perintah navigasi file dasar seperti 'ls' dan 'cd'.
Alasan saya memunculkan riwayat pembelajaran pribadi saya adalah karena saya berharap banyak pengguna Linux baru mungkin merasa kewalahan ketika mereka melihat sintaks unik 'crontab'. Saya dapat meyakinkan Anda, itu tidak terlalu rumit setelah Anda memahami cara kerjanya.
Apa yang akan Anda pelajari dalam panduan ini
Saya ingin memberikan pengenalan singkat tentang beberapa konsep yang terkait dengan crontab agar lebih mudah dipahami. Tujuan saya adalah untuk mengontekstualisasikan konsep-konsep ini dan menggambarkan bagaimana mereka berhubungan satu sama lain.
- Pengantar Singkat Konsep Cron
- Siapkan Akses Crontab untuk Akun Pengguna Anda
- Menangani kesalahan dengan cronjobs Anda
- Membuat cronjob
Pengantar cepat konsep kunci cron
Izinkan saya memperkenalkan Anda pada beberapa konsep dasar seputar 'cron'.
Perbedaan antara Cron, Crontab dan Cron Job
Melihat sesuatu secara visual membantu memahami topik baru dengan lebih cepat. Berikut adalah rincian tentang bagaimana ketiga topik ini umumnya berinteraksi. Saya kemudian akan menjelaskan masing-masing dengan lebih detail.
Elemen | Nama Linux | Artinya |
---|---|---|
Daemon | 'crond' | Diucapkan "setan" atau "hari-mon". Ini adalah proses sistem latar belakang Linux. |
Tabel | 'crontab' | Anda menulis baris ke tabel ini saat memasukkan perintah crontab. Setiap tanda bintang '*' mewakili segmen waktu dan kolom yang sesuai di setiap baris. |
Pekerjaan | Tugas Cron | Tugas spesifik yang akan dilakukan dijelaskan dalam satu baris, dipasangkan dengan id waktu yang ditentukan |
Tabel Cron
Crontab adalah singkatan dari Cron Table. Ini adalah file sistem Linux yang membuat struktur seperti tabel di mana bidang dipisahkan oleh spasi. Pengguna dapat mengisi tabel dengan menetapkan nilai ke setiap bidang (tanda bintang).
Sepanjang artikel, saya mungkin menggunakan bahasa yang berbeda untuk menggambarkan ide ini. Untuk menghapus bidang, sel, kolom, dll. Semua mengacu pada hal yang sama. Jika itu membantu, Anda dapat menganggap crontab Anda seperti database mini.
Tugas Cron
Jika Anda tidak terbiasa dengan database, Anda dapat membayangkan sel dalam file Excel kosong. Either way, untuk analogi ini setiap tanda bintang mewakili kolom yang artinya ditentukan oleh header-nya. Kolom terakhir akan menjadi panggilan untuk perintah atau skrip. Setiap baris lengkap dapat dianggap sebagai pekerjaan individu. Ini sering disebut sebagai "pekerjaan cron" meskipun pekerjaan, tugas, dll. Semuanya adalah istilah yang dapat dipertukarkan.
Daemon Cron
Kami telah membahas tabel dan bagaimana kami mengisinya dengan pekerjaan. Tapi, bagaimana pekerjaan itu dieksekusi? Proses sistem yang disebut Daemon berjalan di latar belakang mesin Linux kami.
Ada Daemon untuk berbagai layanan. Ini biasanya dinamai dengan menambahkan 'd' ke nama layanan.
Secara alami, daemon cron disebut 'crond'. Kami tidak perlu melakukan tindakan apa pun untuk menjalankan daemon tersebut, tetapi jika menurut Anda perintah tersebut tidak berfungsi dengan baik, Anda dapat menggunakan perintah ps untuk memverifikasi bahwa 'crond' sedang berjalan.
ps aux | grep crond
Perintah ini akan mencari proses saat ini untuk semua pengguna dan mengembalikan semua instance 'crond'.
[email protected]:~$ ps ux | grep crond
christo+ 8942 0.0 0.0 18612 840 pts/0 S+ 02:16 0:00 grep --color=auto crond
Saya dapat melihat bahwa daemon sedang berjalan untuk akun pengguna saya. Saya sudah mengetahui hal ini karena saya telah mengisi file sepanjang hari dengan output.
Memahami sintaks Crontab
Sekarang setelah Anda memiliki pemahaman yang samar tentang cara kerja cron, mari kita lihat sintaks menggunakan crontab. Saya harap ini tidak terlalu membingungkan jika Anda dapat membayangkan informasi ini sebagai tabel dalam pikiran Anda.
crontab [options]
* * * * * <command>
OR
* * * * * <path/to/script>
Saya berjanji ini akan berhasil bagi Anda setelah kita mendapatkan contoh kita sendiri dan berjalan. Mari kita bahas sintaks untuk tugas cron lagi.
Seperti yang Anda lihat, sintaks crontab memiliki 5 tanda bintang. Inilah yang diwakili oleh masing-masing tanda bintang tersebut:
1 | 2 | 3 | 4 | 5 | |
---|---|---|---|---|---|
* | * | * | * | * | |
ID | Menit | Jam | Tanggal-Hari | Bulan | Nama Hari |
Nilai | 0-59 | 0 -23 | 1-31 | 1-12 | 0-6 |
CATATAN:Nama Hari 0-6 dimulai dengan hari Minggu.
Untuk menjadwalkan tugas, Anda mengganti tanda bintang yang sesuai dengan nilai yang Anda inginkan.
Mari kita praktikkan dengan cepat. Jika Anda memiliki crontab seperti di bawah ini, kira-kira kapan pekerjaan itu akan dijalankan?
0 0 * * 0
T:Kapan perintah akan dijalankan jika Anda mengatur pekerjaan dengan cara ini?
A. Setiap jam dari Senin sampai Sabtu
B. Setiap menit pada hari Minggu
C. Hanya pada tengah malam dari Senin sampai Sabtu
D. Hanya pada tengah malam pada hari Minggu
Jawabannya di sini adalah D. Jalankan ‘perintah’ pada pukul 00:00 [tengah malam] setiap hari Minggu.
Siapkan crontab cccess untuk akun pengguna Anda
Crontab adalah khusus pengguna. Anda sudah menyentuhnya sedikit. Jika Anda merasa ada kemungkinan Anda pernah menggunakan crontab sebelumnya, Anda dapat memeriksanya menggunakan crontab -l .
[email protected]:~$ crontab -l
no crontab for christopher
[email protected]:~$ crontab -e
no crontab for christopher - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/code
3. /bin/ed
Choose 1-3 [1]: 1
Ketika saya menjalankan perintah ini, Anda dapat melihat bahwa saya tidak memiliki crontab di sistem ini.
Karena saya belum membuat crontab, ketika saya menggunakan -e
untuk mengedit tabel, itu meminta saya untuk editor teks pilihan saya. Nano disarankan sebagai program yang paling mudah digunakan. Anda dapat menggunakan editor teks baris perintah apa pun seperti Vim atau Emacs. Terserah Anda.
Jika Pada Awalnya Anda Tidak Berhasil, Sudo
Jika Anda mencoba crontab -e perintah tetapi tidak mendapatkan hasil ini, Anda mungkin tidak memiliki hak pengguna untuk membuat tabel. Jika Anda memiliki akses sudo, Anda dapat menggunakan sudo untuk mengatur crontab.
sudo crontab -e <your_username>
Sistem Anda akan secara otomatis memuat crontab Anda ke tujuan yang tepat yang dapat bervariasi berdasarkan distribusi tetapi sering kali berada di direktori seperti /var/spool/cron/crontab . Jangan mencoba mengedit file di sini.
Apa yang terjadi jika tugas cron mengalami kesalahan?
Perilaku default adalah mengirim email ke outputnya. Fitur ini dirancang untuk admin yang secara otomatis dapat mengirimkan log ke email “lokal” di domain jaringan.
Anda dapat mengaturnya sendiri jika Anda memiliki server email. Ada juga cara untuk mengotomatiskan keluaran email ke GMail atau layanan serupa. Namun, metode tersebut berada di luar cakupan artikel ini.
Sebagai gantinya, kita akan melihat dua cara umum untuk mengatasi kesalahan tersebut.
1) Kirim Output ke File
Anda dapat menentukan file untuk jenis output ini yang akan dikirim dan kemudian menggunakan >>
untuk mengarahkan output.
Menggunakan >>
akan menambahkan informasi ke file yang ada, sementara satu >
simbol akan menimpa file. Ini penting untuk diketahui jika Anda ingin mempertahankan file log besar yang sering memperbarui catatan. Keduanya akan secara otomatis membuat file jika tidak ada.
Contoh Pekerjaan Cron:
0 * * * * echo "Linux is Cool!" >> ~/crontab_log.txt
2) Gunakan /dev/null
Ini akan melewati opsi email dengan pada dasarnya menghapus data. Kesalahan standar (‘2’) dan keluaran standar (‘1’) keduanya dikirim ke file null.
0 0 * * * echo "Why are you silencing me every night at midnight?" > /dev/null 2>&1
Anda mungkin telah memperhatikan saya menggunakan perintah gema untuk contoh. Tidak ada alasan khusus untuk itu, tetapi ini memudahkan untuk memverifikasi perubahan dan “memeriksa pekerjaan Anda”.
Jika Anda telah melakukan beberapa pemrograman, Anda mungkin telah menggunakan perintah cetak untuk menguji logika Anda. Ini adalah konsep yang sama.
Mari kita coba mengatur pekerjaan cron kita sendiri. Jika Anda sudah "bermain bersama", itu bagus. Jika belum, sekarang saatnya untuk menyiapkan terminal itu dan bersenang-senanglah.
Contoh crontab:perintah dan skrip penjadwalan
Saya menunjukkan kepada Anda beberapa contoh saat saya menjelaskan bagaimana output dirutekan. Apakah itu masuk akal bagi Anda?
Biarkan saya menelusuri contoh pertama.
Menit | Jam | Tanggal-Tanggal | Bulan | Nama Hari | Perintah |
---|---|---|---|---|---|
0 | * | * | * | * | echo “Linux itu Keren!”>> ~/crontab_log.txt |
Menyetel nilai menit ke '0' berarti perintah akan dijalankan setiap jam, pada jam tersebut.
Jadwal Kerja Lanjut
Anda dapat mengedit beberapa nilai sekaligus. Jika mau, Anda dapat mengganti 5 tanda bintang dengan spesifikasi.
Menit | Jam | Tanggal-Tanggal | Bulan | Nama Hari | Perintah |
---|---|---|---|---|---|
*/5 | 3-6 | */5 | */2 | 0,6 | echo “Linux itu Keren!”>> ~/crontab_log.txt |
Tahu apa yang dikatakan orang ini? Demi tutorial ini, saya membuat pekerjaan ini sangat membingungkan. Tidaklah biasa memiliki sesuatu dengan begitu banyak parameter "di alam liar", tetapi mari kita lihat apakah Anda dapat menguraikannya. Untuk hal seperti ini, saya suka bekerja mundur melalui ladang.
Mari kita coba bersama:
Field | Nilai | Artinya |
---|---|---|
Nama Hari | 0,6 | Sabtu dan Minggu |
Bulan | */2 | Setiap bulan yang habis dibagi 2 (genap) bulan. |
Tanggal Hari | * | Setiap Tanggal |
Jam | 3-6 | Antara 3 dan 6 pagi |
Menit | */5 | Setiap 5 Menit |
Dalam Bahasa Biasa:
Jadi setiap bulan, di akhir pekan, terlepas dari tanggalnya, perintah ini akan dijalankan setiap 5 menit antara pukul 3 pagi dan 6 pagi.
Wow, itu berbelit-belit. Jika Anda dapat mengikutinya, Anda siap untuk melakukan pekerjaan cron dengan yang terbaik dari mereka.
Tulis skrip otomatisasi cron sederhana untuk mencadangkan file
Sampai saat ini, tugas cron yang Anda tulis hanya melakukan satu hal. Itu bisa berguna, tapi mungkin Anda ingin melakukan banyak tugas.
Untungnya ini tidak hanya mungkin tetapi juga sangat mudah. Jika Anda ingat dari contoh sintaks asli, Anda juga dapat menggunakan jalur ke skrip.
Ini tidak terbatas hanya pada bash, Anda juga dapat mengimplementasikan skrip yang menggunakan Python atau Perl jika Anda mau.
Apa tujuan kita?
- Pekerjaan akan diproses pada jam 3 pagi setiap malam
- Cadangkan folder /Documents ke file zip
- Buat file teks dengan daftar semua yang ada di direktori
- Buat folder arsip yang mengkloning file cadangan dan teks kami ke dalam sub-folder dengan tanggal saat ini
our_backup_script.sh
#! /bin/bash
DATE=$(date +%d-%m-%Y)
# Date in format DAY##-MONTH##-YEAR####
mkdir -p ~/archive/$DATE
# create a folder for today's date in the archive, if archive doesn't exist, make archive
ls -al ~/Documents > ~/archive/$DATE/contents.txt
# create a text file listing the contents of the documents folder
cd ~/ && tar -cpzf $DATE.docs.backup.gz Documents/*
# change to parent directory to tar /Documents folder
cp ~/$DATE.docs.backup.gz ~/archive/$DATE/documents_archive.gz
# one .gz file is left in the home directory, a clone is sent to our archive under it's date
[email protected]:~$ ls
Desktop Downloads Music Pictures Public Videos
Documents ENV our_backup_script.sh projects Templates 'VirtualBox VMs'
[email protected]:~$ bash our_backup_script.sh
[email protected]:~$ ls
25-11-2019.docs.backup.gz Documents Music projects Videos
archive Downloads our_backup_script.sh Public 'VirtualBox VMs'
Desktop ENV Pictures Templates
[email protected]:~$ ls archive/25-11-2019/
contents.all_files.txt documents_archive.gz
Yang tersisa untuk dilakukan adalah menjadikan skrip ini sebagai tugas cron.
crontab -e
Dan tambahkan berikut ini di sana:
0 3 * * * bash ~/our_backup_script.sh
Apakah milik Anda berhasil? Milik saya. Sebenarnya, saya sangat menyukai ide itu, saya mungkin menyimpan ini sebagai cadangan harian. Salah satu modifikasi yang akan saya lakukan adalah memindahkan arsip saya ke folder di mesin saya yang disinkronkan dengan penyimpanan cloud.
Cara lain untuk menjadwalkan pekerjaan di Linux adalah menggunakan perintah at. Anda mungkin tertarik untuk mempelajarinya juga.
Apakah Anda punya ide untuk skrip yang mungkin ingin Anda buat? Apakah artikel ini membantu Anda memahami crontab dengan lebih baik? Bagikan dengan kami di komentar.