GNU/Linux >> Belajar Linux >  >> Linux

Memahami Crontab di Linux Dengan Contoh

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.


Linux
  1. Perintah Tee Linux dengan Contoh

  2. Perintah kepala Linux dengan Contoh

  3. Perintah JQ di Linux dengan Contoh

  1. Perintah wc Linux dengan Contoh

  2. Perintah sortir Linux dengan Contoh

  3. 6 Contoh Perintah Linux Crontab

  1. Perintah Echo di Linux (Dengan Contoh)

  2. Perintah man di Linux dengan Contoh

  3. Perintah AWK di Linux dengan Contoh