Cron & crontab, jelaskan

Lucaine diterbitkan belum lama berselang tutorial bagus tentang cron dan crontab yang menurut saya layak untuk dibagikan. Cron adalah sejenis yang setara dengan Tugas Terjadwal di Windows, hanya itu ditangani dari terminal. Mereka yang lebih suka antarmuka visual untuk mencapai tujuan yang sama, dapat melihat ini artikel lain.

Apa itu cron?

Nama cron berasal dari bahasa Yunani chronos yang berarti "waktu". Dalam sistem operasi Unix, cron adalah manajer proses latar belakang biasa (daemon) yang menjalankan proses atau skrip secara berkala (misalnya, setiap menit, hari, minggu, atau bulan). Proses yang harus dijalankan dan waktu di mana mereka harus dieksekusi ditentukan dalam file crontab.

Como funciona

Daemon cron dimulai dari /etc/rc.d/ o /etc/init.d tergantung distribusinya. Cron berjalan di latar belakang, memeriksa tabel tugas crontab setiap menit / etc / crontab o en / var / spool / cron dalam mencari tugas yang harus diselesaikan. Sebagai pengguna, kita dapat menambahkan perintah atau skrip dengan tugas ke cron untuk mengotomatiskan beberapa proses. Ini berguna misalnya untuk mengotomatiskan pembaruan sistem atau sistem cadangan yang baik.

Artikel terkait:
Tutorial: Instal Paket .tar.gz dan .tar.bz2

Apa itu Crontab?

Crontab adalah file teks sederhana yang menyimpan daftar perintah yang akan dijalankan pada waktu yang ditentukan oleh pengguna. Crontab akan memeriksa tanggal dan waktu ketika skrip atau perintah harus dijalankan, izin eksekusi dan akan melakukannya di latar belakang. Setiap pengguna dapat memiliki file crontab mereka sendiri, bahkan file / etc / crontab Ini diasumsikan sebagai file crontab pengguna root, ketika pengguna normal (dan bahkan root) ingin membuat file crontab mereka sendiri maka kita akan menggunakan perintah crontab.

Crontab adalah cara termudah untuk mengelola tugas cron pada sistem multi-pengguna, baik sebagai pengguna sistem sederhana atau pengguna root.

Menggunakan crontab

Kami mulai dengan contoh sederhana.

Kami akan mengotomatiskan pembaruan sistem, untuk menghilangkan pertanyaan "Saya selalu harus memperbarui dan saya tidak suka itu!"

bagaimana
Artikel terkait:
Perintah untuk mengetahui sistem (mengidentifikasi perangkat keras dan beberapa konfigurasi perangkat lunak)

Pertama-tama kita akan membuat script. Skrip ini akan dipanggil oleh cron dan berisi semua instruksi yang kita inginkan, oleh karena itu perlu untuk mengujinya dalam beberapa kasus dan dalam beberapa cara sebelum memasukkannya ke dalam cron, skrip pembaruan sederhana seperti ini:

#! / bin / bash #script update example #choose your distribution # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu

Hapus # dari baris distro Anda. Jika itu Ubuntu / Debian, itu dimulai dengan apt-get.

Kami menyimpan skrip sebagai update.sh (misalnya direktori skrip rumah Anda). Kami mengubah izin eksekusi dari skrip tersebut dengan:

chmod a + x ~ / scripts / update.sh

Kami menjalankan skrip beberapa kali untuk memverifikasi bahwa semuanya berjalan dengan lancar, kami memodifikasi apa yang diperlukan (tidak boleh mengandung kesalahan, jika tidak cron hanya akan mengulangi kesalahan berulang kali). Sekarang untuk menambahkan tugas ke crontab kami.

Tambahkan tugas ke crontab

Kami menjalankan edisi crontab dengan crontab -e, di beberapa distro (seperti ubuntu) memberi kami opsi untuk memilih editor teks yang kami inginkan, sisanya kami tinggal dengan vi. File crontab akan terlihat seperti ini.

# mh dom mon dow perintah pengguna

dimana:

  • m sesuai dengan menit skrip akan dijalankan, nilainya berkisar dari 0 hingga 59
  • h waktu yang tepat, format 24 jam ditangani, nilainya berkisar dari 0 hingga 23, dengan 0 menjadi pukul 12:00 tengah malam.
  • hadiah mengacu pada hari dalam sebulan, misalnya Anda dapat menentukan 15 jika Anda ingin menjalankan setiap 15 hari
  • dow Berarti hari dalam seminggu, dapat berupa angka (0 hingga 7, di mana 0 dan 7 adalah Minggu) atau 3 huruf pertama hari itu dalam bahasa Inggris: sen, tue, wed, thu, fri, sat, sun.
  • pemakai mendefinisikan pengguna yang akan menjalankan perintah, dapat berupa root, atau pengguna lain selama mereka memiliki izin untuk menjalankan skrip.
  • Command mengacu pada perintah atau jalur absolut dari skrip yang akan dieksekusi, contoh: /home/usuario/scripts/update.sh, jika memang memanggil skrip, ia harus dapat dieksekusi

Untuk memperjelas beberapa contoh tugas cron dijelaskan:

15 10 * * * pengguna /home/user/scripts/update.sh

Ini akan menjalankan skrip update.sh pada 10:15 setiap hari

15 22 * * * pengguna /home/user/scripts/update.sh

Ini akan menjalankan skrip update.sh pada pukul 10:15 setiap hari

00 10 * * 0 root apt-get -y update Pengguna root

Ini akan menjalankan pembaruan setiap hari Minggu pukul 10:00

45 10 * * pembaruan apt-get -y root matahari

Pengguna root akan menjalankan pembaruan setiap Minggu (Minggu) pukul 10:45 pagi

30 7 20 11 * pengguna /home/usuario/scripts/update.sh

Pada 20 November pukul 7:30 pengguna akan menjalankan skrip

30 7 11 11 pengguna matahari /home/usuario/scripts/pastel_con_velitas.sh

Pada 11 November pukul 7:30 pagi dan itu adalah hari Minggu, pengguna akan merayakan sysadminnya (yaitu, saya)

01 * * * * pengguna /home/usuario/scripts/molestorecordatorio.sh

Pengingat yang mengganggu setiap menit setiap jam setiap hari (TIDAK disarankan).

Mereka masih bisa ditangani kisaran khusus:

30 17 * * 1,2,3,4,5

Pukul 5 sore setiap hari dari Senin sampai Jumat.

00 12 1,15,28* *

Pukul 12 siang setiap hari pertama, kelima belas dan 28 setiap bulan (ideal untuk penggajian)

Jika ini membingungkan, pegangan crontab string khusus untuk menentukan rentang ini.

@reboot Jalankan sekali, saat startup
@yearly berjalan hanya setahun sekali: 0 0 1 1 *
@tahun sama dengan @yearly
@bulan berjalan sebulan sekali, hari pertama: 0 0 1 * *
@weekly Mingguan menit pertama dari jam pertama minggu itu. 0 0 * * 0 ″.
@hari setiap hari, pukul 12:00 A.M. 0 0 * * *
@idnight sama dengan @daily
@jam di menit pertama setiap jam: 0 * * * *

Penggunaannya sangat sederhana.

@hourly user /home/user/scripts/molestorecordatorio.sh @monthly user /home/user/scripts/backup.sh @daily root apt-get update && apt-get -y upgrade

Terakhir tapi bukan yang akhir:

Manajemen pekerjaan Cron

file crontab

Ganti file crontab yang ada dengan file yang ditentukan pengguna

-e crontab

Edit file crontab pengguna, setiap baris baru akan menjadi tugas crontab baru.

crontab-l

Buat daftar semua tugas crontab pengguna

crontab -d

Hapus crontab pengguna

crontab -c dir

Mendefinisikan direktori crontab pengguna (ini harus memiliki izin tulis dan eksekusi pengguna)

crontab -u pengguna

awalan untuk menangani crontab pengguna lain, contoh:

$ sudo crontab -l -u root $ sudo crontab -e user2 #crontab -d -u pengguna

Alat ini, seperti banyak alat lainnya, dapat dilihat lebih dalam dan lebih detail di:

Terima kasih Lucain!

tinggalkan Komentar Anda

Alamat email Anda tidak akan dipublikasikan. Bidang yang harus diisi ditandai dengan *

*

*

  1. Penanggung jawab data: Miguel Ángel Gatón
  2. Tujuan data: Mengontrol SPAM, manajemen komentar.
  3. Legitimasi: Persetujuan Anda
  4. Komunikasi data: Data tidak akan dikomunikasikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Basis data dihosting oleh Occentus Networks (UE)
  6. Hak: Anda dapat membatasi, memulihkan, dan menghapus informasi Anda kapan saja.

  1.   Gambar placeholder Alvaro Ortiz dijo

    Ugh ... agak membingungkan.

  2.   tonik dijo

    * / 30 hilang (di bidang menit) yang berjalan setiap 30 menit ...

    1.    erm3nda dijo

      Hanya ini yang akan saya komentari sampai saya memutuskan untuk mereview komentarnya 😀
      Pengubah ini adalah bagian informasi yang sangat penting dan sesuatu yang sangat berguna.

      1.    Kika dijo

        Hello!
        Saat ini saya menguji konfigurasi setiap 45 menit.

        * / 45 * * * *, dan instruksi dijalankan pada 45 menit setiap jam DAN setiap jam. Artinya:

        Ini beroperasi pada 3:45, lalu 4:00, 4:45, lalu 5:00, 5:45, 6:00, 6:45, dan seterusnya.

        Ada yang salah? Apa yang dapat saya lakukan untuk membuatnya hanya setiap 45 menit, atau setidaknya sekali dalam 45 menit setiap jam.

    2.    Kika dijo

      Hello!
      Saat ini saya menguji konfigurasi setiap 45 menit.

      * / 45 * * * *, dan instruksi dijalankan pada 45 menit setiap jam DAN setiap jam. Artinya:

      Ini beroperasi pada 3:45, lalu 4:00, 4:45, lalu 5:00, 5:45, 6:00, 6:45, dan seterusnya.

      Ada yang salah? Apa yang dapat saya lakukan untuk membuatnya hanya setiap 45 menit, atau setidaknya sekali dalam 45 menit setiap jam.

  3.   Kendur dijo

    Halo sangat berguna informasi untuk menjelaskan cara kerja cron.
    Bytes

  4.   Kendur dijo

    untuk *

  5.   Pemburu dijo

    Luar biasa, terima kasih telah menjelaskan cara kerja cron .. mari kita bantu put

  6.   Yakub dijo

    Baris ini seperti yang saya pahami akan dieksekusi pada pukul 10:15, perbaiki saya jika saya salah
    Nah di sana dikatakan 10:15
    15 22 * * * pengguna /home/user/scripts/update.sh

  7.   Agustin dijo

    Halo! info yang sangat bagus.
    Untuk menjalankan Script setiap setengah jam, baris yang harus ditambahkan ke CronTab adalah: "30 * * * * root Scrip.sh" Benar? Terima kasih banyak!

  8.   ayo gunakan linux dijo

    Tidak. Jika saya ingat dengan benar, untuk itu Anda harus meletakkan / 30 * * * * root Scrip.sh.
    Artinya, tambahkan / sebelum 30.
    Bersulang! Paul.

  9.   Jonathan dijo

    Halo Saya menyukai posting Anda, ini sangat lengkap tetapi saya ingin menanyakan sesuatu.
    Saya mengalami masalah dengan perintah ini dan yang seperti "di".

    Saya ingin menjalankan skrip pada waktu tertentu dan meletakkan

    di -f /home/mi_user/Desk/script.sh 18:08 contoh

    dan skrip tidak dieksekusi di layar, yaitu di terminal, apakah dijalankan di latar belakang?

    Dan dengan cron, hal yang sama terjadi pada saya, saya mengedit file crontab dengan "crontab -e"

    pada akhirnya saya menambahkan baris ini:

    46 19 my_user /home/mi_user/Desk/script.sh

    dan tidak melakukan apa-apa, tidak menampilkan skrip.

    Ada saran? Terima kasih banyak dan mohon maaf atas ketidaknyamanan yang ditimbulkan

    1.    ayo gunakan linux dijo

      Agar terminal muncul, Anda mungkin harus menjalankan terminal dan meneruskan skrip sebagai parameter.

      Sebagai contoh:

      lxterminal -e "my_user /home/mi_user/Desktop/script.sh"

      Parameter yang akan digunakan dapat bervariasi berdasarkan emulator terminal yang Anda gunakan.

      Saya harap ini berhasil.

      Memeluk! Paul.

  10.   patretca dijo

    Masukan dihargai.

    10 poin !!

    salam2!!

  11.   Rodolfo dijo

    Terima kasih banyak, sangat membantu saya untuk mengklarifikasi beberapa hal, terima kasih total, untuk lebih jelasnya atau keraguan saya akan pergi ke HALAMAN MAN, salam yang berulang.

  12.   jahir dijo

    man, terima kasih banyak, saya telah membaca dan menguji contoh. terima kasih banyak ... itu sangat bisa dimengerti. Bersulang

  13.   geovanni dijo

    Saya menggunakan ubuntu Server 12.04.2 LTS, dan versi crontab yang saya miliki, untuk menghapus daftar pekerjaan pengguna digunakan, crontab -r (dan -l, seperti yang dikatakan manual ini). Tentu itu dengan pertanyaan versi.

    Di sisi lain, saya pernah menjalankan hanya crontab dan jenis ini memungkinkan saya membuat file eksekusi saya sendiri, tetapi ini bukan file yang sedang dieksekusi. Yang berjalan adalah yang ada di / etc / crontab. mungkin seseorang akan menggunakan komentar tersebut.

    PS (Saya mencari dengan lokasi dan di mana crontab tetapi hanya mengembalikan alamat yang disebutkan di atas dan file lain yang dienkripsi, jadi jika yang dijalankan adalah yang ada di / etc / crontab, tetapi ketika menjalankan perintah crontab -e, milik saya muncul dengan semua pekerjaan yang telah saya tentukan) di mana file ini disimpan '???? Salam. Saya selalu masuk dengan root.

  14.   Sebastian dijo

    Luar biasa, sangat berguna !!!

  15.   mmm dijo

    Halo, saya ingin melakukan ini ………… «15 10 * * * root ifdown eth0»

    Artinya pada waktu tertentu kartu jaringan dimatikan ………… baik, saya taruh di crontab dan tidak berhasil …… .. ada apa?

    Saludos y gracias

  16.   Miguel dijo

    Anda melewatkan mendefinisikan "mon" setelah judul "Tambahkan tugas ke crontab"

    Artikelnya masih bagus, cron sangat berguna.

  17.   Oscar dijo

    Betapa kerennya postingan yang bagus itu, tanya saya
    Jika saya ingin melacak catatan yang ditinggalkan oleh pelaksanaan tugas, di mana saya dapat melihatnya?

    is decdir Saya ingin melihat riwayat tindakan yang dilakukan di masa lalu dari file ini dan saya ingin melihat siapa yang telah mengubahnya dan tanggal

    terima kasih

  18.   oscar dijo

    Saya ingin memeriksa sejarah modifikasi ini

    bagaimana saya bisa melakukannya

    terima kasih

  19.   Andres Ledo dijo

    Selamat pagi,

    Saya pikir dalam skrip ubuntu Anda telah membuat kesalahan, Anda telah menempatkan peningkatan ap-get -y alih-alih peningkatan apt-get -y. (Anda telah meninggalkan t).

    Sebuah ucapan.

    1.    ayo gunakan linux dijo

      Begitu juga. Terima kasih!
      Memeluk! Paul

  20.   gabriel dijo

    Saya ingin tahu cara membuat file cron agar dapat menentukan waktu setiap saat dijalankan, direktori, dll.

  21.   Valentin dijo

    Terima kasih telah memperjelas pengoperasian dan perintah dasar untuk cron, sekarang menghibur diri Anda sebentar.

  22.   Sander dijo

    Kapanpun saya mencari informasi tentang topik apapun yang berhubungan dengan Gnu / Linux saya berputar-putar pada akhirnya selalu menemukan dalam 90% kasus tutorial terbaik di komunitas yang hebat ini, saya pikir mulai sekarang saya akan mulai di sini dan kemudian di tempat lain.

    salam

    1.    ayo gunakan linux dijo

      Terima kasih Sander! Sebuah pelukan! Paul.

  23.   dariyo dijo

    dom = hari dalam sebulan
    dow = hari dalam seminggu
    lebih mudah jika Anda mengasosiasikan

  24.   Pascual dijo

    Terima kasih banyak, ini sangat lengkap dan dijelaskan dengan baik.

  25.   maxillia dijo

    Ini adalah hal yang sama yang diberikan guru OS saya kepada kami, saya tidak mengubah apa pun, sekarang saya mengerti mengapa kelasnya sangat buruk. -. Nah, ini sama dengan pekerjaan rumah xD

  26.   Marcelo dijo

    Diperkirakan,

    Query, bisakah durasi tugas dibatasi?
    Misalnya saya punya tugas yang diulang setiap 5 menit, di pengulangan jika tugas ini masih aktif, matikan dan jalankan lagi.

    Terima kasih,
    Marcelo.-

    1.    ayo gunakan linux dijo

      Halo, Marcelo!

      Saya pikir akan lebih baik jika Anda menanyakan pertanyaan ini di layanan tanya jawab kami bernama Meminta DesdeLinux sehingga seluruh komunitas dapat membantu Anda mengatasi masalah Anda.

      Pelukan, Pablo.

  27.   aj dijo

    postingan yang bagus.
    Apa perintah per terminal untuk menambahkan tugas ke crontab (tanpa memasukkan crontab dan menambahkannya secara manual dengan 'crontab -e' atau mengganti crontab dengan crontab lain dengan 'file crontab').
    Idenya adalah membuat skrip eksternal untuk menambahkan tugas ke crontab
    terima kasih

    1.    david dijo

      menurut saya Anda bisa menggunakan 'echo' apapun yang ingin Anda tambahkan '| kucing >> 'jalur cronotab (/ etc / cronotab)' «

  28.   Raphael Vera dijo

    Bagaimana ekspresi dijalankan setiap 3 hari dengan tepat

  29.   José Antonio dijo

    Hola.

    Saya mengalami masalah saat menjalankan tugas cron.

    Saya menjalankan tugas berikut dengan cronta -e:

    01 * * * * root /home/user/script/mfile.sh

    tapi tugas itu belum selesai. Saya telah memverifikasi bahwa myfile.sh memiliki izin eksekusi dan pengguna yang mengeksekusinya adalah root.

    Saya menjalankan tugas yang sama di / etc / crontab dan setelah memulai ulang layanan, itu juga tidak berhasil untuk saya.
    Isi myfile.sh adalah perintah yang memperbarui DB dan jika saya menjalankannya di konsol, itu berfungsi.
    tahu apa masalahnya?

    1.    Fredd dijo

      Sepertinya pengguna database tidak memiliki semua izin dan Anda harus mengekspor variabel lingkungan dari mesin database Anda terlebih dahulu.
      Misalnya di db2 baris ini akan menuju ke awal skrip
      . / home / db2inst1 / sqllib / db2profile

      Penyebab lain bisa jadi script membutuhkan koneksi ke database, membuat koneksi ke database di dalam script

  30.   LA3 dijo

    Saya tidak tahu bahwa saya harus memulai kembali crond, saya telah berjuang dengan ini untuk sementara waktu

  31.   kenia dijo

    Mereka akan tahu bagaimana menunjukkan bahwa tugas dijalankan setiap akhir bulan, pada waktu yang ditentukan .. detailnya adalah bahwa saya tidak dapat mencapai bagaimana saya tahu bahwa itu membutuhkan hari terakhir setiap bulan .. ??? Saya harus menuliskannya satu per satu tetapi ketika akhir bulan Februari tiba, hal itu menjadi rumit bagi saya ..

  32.   Isa dijo

    Selamat siang!!

    Bagaimana cara menghentikan proses yang sedang dijalankan di crontab?

  33.   Isa dijo

    proses * …………

  34.   Julianna dijo

    Mungkinkah Anda dapat membantu saya? eu tenho um script oleh minha ditulis yang tidak bekerja tanpa crontab! jб dei semua izin, tidak ada pengguna atau cron khusus pribadi yang dapat menjalankannya-hampir tidak ada yang terjadi! Saya ingin tahu apakah Anda dapat membantu saya, beberapa hal lain berhasil tanpa cron! Vlws

  35.   Anthox dijo

    Bagaimana Anda menempatkan tugas untuk dijalankan setiap hari terakhir setiap bulan (hari: 31-30-28)?

  36.   tfercho dijo

    Seperti yang Anda ketahui, perintah su digunakan untuk mengubah pengguna di konsol. Jika saya menggunakan perintah su sebagai berikut: "pengguna Anda" ubah pengguna tetapi tanpa pengaturan yang tepat dari "pengguna", jika saya menjalankan su sebagai: "su - user" ubah pengguna dengan memuat pengaturan pengguna. Dengan cron saya menunjukkan pengguna, tetapi bagaimana cara memuat konfigurasi pengguna ini?

  37.   Merampok dijo

    Dan jika saya ingin menghentikannya?

  38.   Reg dijo

    Halo,
    Saya tidak tahu apa yang saya lakukan salah, tetapi saya mengikuti langkah-langkahnya dan tidak ada yang dieksekusi. Saya telah mencoba:
    59 * * * * / usr / bin / gedit
    * * * * * / usr / bin / gedit
    * * * * * root / usr / bin / gedit
    * * * * * usr / bin / test.sh
    * * * * * root usr / bin / test.sh

    dan tidak sama sekali. Itu tidak mengeksekusi apa pun. Saya telah reboot dan segalanya.

  39.   Ferqos dijo

    terima kasih banyak