Cron & crontab, dijelaskan

Lucaine diterbitkan sebentar tadi tutorial yang sangat baik mengenai cron dan crontab yang saya rasa patut dikongsi. Cron adalah sejenis dengan Tugas Berjadual di Windows, hanya yang dikendalikan dari terminal. Mereka yang lebih suka antara muka visual untuk mencapai matlamat yang sama, dapat melihatnya barang lain.

Apa itu cron?

Nama cron berasal dari kronos Yunani yang bermaksud "masa." Dalam sistem operasi Unix, cron adalah pengurus proses latar belakang biasa (daemon) yang menjalankan proses atau skrip secara berkala (misalnya, setiap minit, hari, minggu, atau bulan). Proses-proses yang mesti dijalankan dan masa di mana ia mesti dijalankan ditentukan dalam fail crontab.

Como funciona

Demon cron bermula dari /etc/rc.d/ o /etc/init.d bergantung kepada pembahagian. Cron berjalan di latar belakang, memeriksa jadual tugas crontab setiap minit / etc / crontab dalam / var / spool / cron dalam mencari tugas yang harus diselesaikan. Sebagai pengguna kita dapat menambahkan perintah atau skrip dengan tugas untuk cron untuk mengotomatisasi beberapa proses. Ini berguna misalnya untuk mengautomasikan kemas kini sistem atau sistem sandaran yang baik.

artikel berkaitan:
Tutorial: Pasang Pakej .tar.gz dan .tar.bz2

Apa itu Crontab?

Crontab adalah fail teks ringkas yang menyimpan senarai arahan yang akan dilaksanakan pada waktu yang ditentukan oleh pengguna. Crontab akan mengesahkan tarikh dan masa skrip atau perintah harus dilaksanakan, izin pelaksanaan dan ia akan melakukannya di latar belakang. Setiap pengguna boleh memiliki fail crontab mereka sendiri, sebenarnya / etc / crontab ia dianggap sebagai file crontab pengguna root, apabila pengguna biasa (dan bahkan root) ingin menghasilkan file crontab mereka sendiri maka kita akan menggunakan perintah crontab.

Crontab adalah kaedah termudah untuk menguruskan tugas cron pada sistem berbilang pengguna, sama ada sebagai pengguna sistem sederhana atau pengguna root.

Menggunakan crontab

Kita mulakan dengan contoh mudah.

Kami akan mengemas kini sistem secara automatik, untuk menghilangkan gangguan "Saya selalu perlu mengemas kini dan saya tidak suka!"

artikel berkaitan:
Perintah untuk mengetahui sistem (mengenal pasti perkakasan dan beberapa konfigurasi perisian)

Pertama sekali kita akan membuat skrip. Skrip ini akan dipanggil oleh cron dan akan mengandungi semua arahan yang kita mahu lakukan, oleh itu perlu untuk mengujinya dalam beberapa kes dan dengan beberapa cara sebelum memasukkannya ke dalam cron, skrip kemas kini yang mudah seperti ini:

#! / bin / bash # contoh kemas kini skrip # pilih pengedaran anda # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu

Keluarkan # dari garis distro anda. Sekiranya Ubuntu / Debian, ia bermula dengan apt-get.

Kami menyimpan skrip sebagai update.sh (misalnya skrip direktori rumah anda). Kami mengubah izin pelaksanaan skrip tersebut dengan:

chmod a + x ~ / skrip / kemas kini.sh

Kami menjalankan skrip beberapa kali untuk mengesahkan bahawa semuanya berjalan lancar, kami mengubahsuai apa yang perlu (ia tidak boleh mengandungi ralat, jika tidak, cron hanya akan mengulangi kesalahan berulang kali) Sekarang untuk menambah tugas ke crontab kami.

Tambahkan tugas ke crontab

Kami menjalankan edisi crontab dengan crontab -e, di beberapa distro (seperti Ubuntu) ia memberi kita pilihan untuk memilih editor teks yang kita mahukan, selebihnya kita ditinggalkan dengan vi. Fail crontab akan kelihatan seperti ini.

# mh dom mon dow arahan pengguna

di mana:

  • m sesuai dengan saat skrip akan dijalankan, nilainya berkisar antara 0 hingga 59
  • h waktu yang tepat, format 24 jam dikendalikan, nilainya berkisar antara 0 hingga 23, dengan 0 menjadi 12:00 tengah malam.
  • hadiah merujuk pada hari dalam bulan, sebagai contoh anda boleh menentukan 15 jika anda mahu menjalankan setiap 15 hari
  • dow bermaksud hari dalam seminggu, ia boleh berangka (0 hingga 7, di mana 0 dan 7 adalah hari Ahad) atau 3 huruf pertama hari itu dalam bahasa Inggeris: mon, tue, wed, thu, fri, sat, sun.
  • pengguna mendefinisikan pengguna yang akan melaksanakan perintah, itu dapat root, atau pengguna yang berbeda asalkan mereka memiliki izin untuk melaksanakan skrip.
  • arahan merujuk kepada arahan atau jalan mutlak skrip yang akan dilaksanakan, contoh: /home/usuario/scripts/update.sh, jika memanggil skrip, ia mesti dilaksanakan

Untuk menjelaskan beberapa contoh tugas cron yang dijelaskan:

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

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

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

Ia akan menjalankan skrip update.sh pada pukul 10 malam setiap hari

00 10 * * 0 root apt-get -y kemas kini pengguna Root

Ia akan mengemas kini setiap hari Ahad jam 10:00 pagi

45 10 * * kemas kini ap-get -y root root

Pengguna root akan menjalankan kemas kini setiap hari Ahad (Ahad) jam 10:45 pagi

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

Pada 20 November jam 7:30 pengguna akan menjalankan skrip

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

Pada 11 November jam 7:30 pagi dan itu adalah hari Ahad, pengguna akan meraikan sysadminnya (iaitu saya)

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

Peringatan yang menjengkelkan setiap minit setiap jam setiap hari (TIDAK digalakkan).

Mereka masih boleh dikendalikan julat khas:

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

Pukul 5:30 setiap hari dari hari Isnin hingga Jumaat.

00 12 1,15,28 **

Pukul 12 tengah hari setiap pertama, kelima belas dan 28 setiap bulan (sesuai untuk gaji)

Sekiranya ini membingungkan, crontab menangani rentetan khas untuk menentukan julat ini.

@reboot Jalankan sekali, pada permulaan
@tahun berjalan hanya sekali setahun: 0 0 1 1 *
@ sama seperti @yearly
@bulan berjalan sebulan sekali, hari pertama: 0 0 1 * *
Mingguan @ minggu pertama minit pertama dalam seminggu. 0 0 * * 0 ″.
@ harian setiap hari, pada pukul 12:00 A.M. 0 0 * * *
@ tengah malam sama seperti @daily
@hourly pada minit pertama setiap jam: 0 * * * *

Penggunaannya sangat mudah.

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

Akhir sekali:

Pengurusan pekerjaan Cron

fail crontab

Ganti fail crontab yang ada dengan fail yang ditentukan pengguna

crontab -e

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

crontab -l

Senaraikan semua tugas crontab pengguna

crontab -d

Padamkan crontab pengguna

crontab -c dir

Mendefinisikan direktori crontab pengguna (ini mesti mempunyai kebenaran menulis dan melaksanakan pengguna)

pengguna crontab -u

awalan untuk menangani crontab pengguna lain, contoh:

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

Alat ini, seperti yang lain, dapat dilihat dengan lebih mendalam dan lebih terperinci dalam:

Terima kasih Lucain!

Kandungan artikel mematuhi prinsip kami etika editorial. Untuk melaporkan ralat, klik di sini.

48 komen, tinggalkan komen anda

Tinggalkan komen anda

Alamat email anda tidak akan disiarkan.

*

*

  1. Bertanggungjawab atas data: Miguel Ángel Gatón
  2. Tujuan data: Mengendalikan SPAM, pengurusan komen.
  3. Perundangan: Persetujuan anda
  4. Komunikasi data: Data tidak akan disampaikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Pangkalan data yang dihoskan oleh Occentus Networks (EU)
  6. Hak: Pada bila-bila masa anda boleh menghadkan, memulihkan dan menghapus maklumat anda.

  1.   Gambar placeholder Alvaro Ortiz kata

    Aduh ... agak membingungkan.

  2.   tonik kata

    * / 30 tiada (di medan minit) yang berjalan setiap 30 minit ...

    1.    erm3nda kata

      Cuma ini saya akan memberi komen sehingga saya memutuskan untuk mengulas komen 😀
      Pengubah ini adalah maklumat yang sangat penting dan sesuatu yang sangat berguna.

      1.    Kika kata

        Hello!
        Sekarang ini saya menguji konfigurasi setiap 45 minit.

        * / 45 * * * *, dan arahan dilaksanakan pada 45 minit setiap jam DAN setiap jam. Maksudnya:

        Ia berjalan pada jam 3:45, kemudian 4:00, 4:45, kemudian 5:00, 5:45, 6:00, 6:45, dan seterusnya

        Saya mempunyai sesuatu yang salah? Apa yang boleh saya lakukan sehingga setiap 45 minit, atau sekurang-kurangnya sekali pada 45 minit setiap jam.

    2.    Kika kata

      Hello!
      Sekarang ini saya menguji konfigurasi setiap 45 minit.

      * / 45 * * * *, dan arahan dilaksanakan pada 45 minit setiap jam DAN setiap jam. Maksudnya:

      Ia berjalan pada jam 3:45, kemudian 4:00, 4:45, kemudian 5:00, 5:45, 6:00, 6:45, dan seterusnya

      Saya mempunyai sesuatu yang salah? Apa yang boleh saya lakukan sehingga setiap 45 minit, atau sekurang-kurangnya sekali pada 45 minit setiap jam.

  3.   Slack kata

    Halo sangat berguna maklumat untuk menjelaskan bagaimana cron berfungsi.
    Bytes

  4.   Slack kata

    untuk *

  5.   Pemburu kata

    Hebat, terima kasih kerana menjelaskan bagaimana cron berfungsi .. mari letakkan sedikit tangan 🙂

  6.   Yakub kata

    Garis ini seperti yang saya faham akan dilaksanakan pada 10:15 malam, betulkan saya jika saya salah
    Di sana ia mengatakan 10:15 pagi
    15 22 * * * pengguna /home/user/scripts/update.sh

  7.   Agustin kata

    Helo! maklumat yang sangat baik.
    Untuk melaksanakan Skrip setiap setengah jam, garis yang harus ditambahkan ke CronTab adalah: "30 * * * * root Scrip.sh" Betul? Terima kasih banyak-banyak!

  8.   mari gunakan linux kata

    Tidak. Sekiranya saya ingat dengan betul, untuk itu anda mesti meletakkan / 30 * * * * root Scrip.sh.
    Iaitu, tambahkan / sebelum 30.
    Ceria! Paul.

  9.   Jonathan kata

    Helo Saya menyukai catatan anda, sangat lengkap tetapi saya ingin bertanya sesuatu kepada anda.
    Saya menghadapi masalah dengan arahan ini dan seperti "at".

    Saya mahu menjalankan skrip pada waktu tertentu dan meletakkan

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

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

    Dan dengan cron perkara yang sama berlaku pada saya, saya menyunting fail crontab dengan "crontab -e"

    pada akhir saya menambah baris ini:

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

    dan tidak melakukan apa-apa, ia tidak menunjukkan skrip.

    Ada cadangan? Terima kasih banyak dan mohon maaf atas sebarang kesulitan

    1.    mari gunakan linux kata

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

      Sebagai contoh:

      lxterminal -e "my_user /home/my_user/Desk/script.sh"

      Parameter yang akan digunakan mungkin berbeza-beza berdasarkan emulator terminal yang anda gunakan.

      Saya harap ia berjaya.

      Peluk! Paul.

  10.   patrecas kata

    Sumbangan dihargai.

    10 mata !!

    salu2!!

  11.   Rodolfo kata

    Terima kasih banyak, ini banyak membantu saya menjelaskan beberapa perkara, terima kasih, untuk maklumat lebih lanjut atau pertanyaan saya akan pergi ke MAN PAGE, mengucapkan salam.

  12.   jahir kata

    Pakcik terima kasih banyak, saya telah membaca dan menguji contohnya. terima kasih banyak ... sangat difahami. Sorakan

  13.   Geovanni kata

    Saya menggunakan Ubuntu Server 12.04.2 LTS, dan versi crontab yang saya ada, untuk menghapus senarai tugas pengguna yang digunakan, crontab -r (dan -l, seperti yang dinyatakan dalam manual ini). Sudah tentu ia adalah persoalan versi.

    Sebaliknya, saya hanya menjalankan crontab dan jenis ini membolehkan saya membuat fail pelaksanaan saya sendiri, tetapi ini bukan yang dijalankan. Yang berjalan adalah yang ada di / etc / crontab. mungkin ada yang akan menggunakan komen tersebut.

    PS (Saya mencari dengan mencari dan di mana crontab tetapi ia hanya mengembalikan alamat tersebut dan fail lain yang dienkripsi, jadi jika yang dieksekusi adalah yang di / etc / crontab, tetapi ketika menjalankan perintah crontab -e, saya akan muncul dengan semua pekerjaan yang telah saya tetapkan) di manakah fail ini disimpan '???? Salam. Saya selalu log masuk dengan root.

  14.   Sebastian kata

    Hebat, sangat berguna !!!

  15.   mmm kata

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

    iaitu, pada masa tertentu kad rangkaian dimatikan ………… baik, saya memasukkannya ke dalam crontab dan ia tidak berfungsi …… .. ada apa?

    Salam dan terima kasih

  16.   Miguel kata

    Anda tidak dapat menentukan "mon" selepas tajuk "Tambahkan tugas ke crontab"

    Artikelnya masih bagus, cron sangat berguna.

  17.   Oscar kata

    Betapa hebatnya jawatan itu, tanya saya
    Sekiranya saya ingin mencatat rekod yang ditinggalkan oleh pelaksanaan tugas, di mana saya dapat melihatnya?

    adakah saya mahu melihat sejarah tindakan yang dibuat pada masa lalu fail ini dan saya ingin melihat siapa yang telah mengubahnya dan tarikhnya

    terima kasih

  18.   oscar kata

    Saya ingin menyemak sejarah pengubahsuaian ini

    bagaimana saya boleh melakukannya

    terima kasih

  19.   Andres Ledo kata

    Selamat pagi,

    Saya fikir bahawa dalam skrip ubuntu anda telah melakukan kesalahan, anda telah membuat peningkatan ap-get -y dan bukan peningkatan apt-get -y. (Anda telah meninggalkan t).

    Sesuatu ucapan.

    1.    mari gunakan linux kata

      Begitu juga. Terima kasih!
      Peluk! Paul

  20.   Gabriel kata

    Saya ingin tahu bagaimana membuat fail cron untuk dapat menentukan waktu setiap ketika ia dijalankan, direktori, dll.

  21.   Valentin kata

    Terima kasih kerana menjelaskan operasi dan arahan asas untuk cron, sekarang untuk menghiburkan diri sebentar.

  22.   Sander kata

    Setiap kali saya mencari maklumat mengenai topik yang berkaitan dengan Gnu / Linux, saya selalu berpusing-pusing untuk selalu mencari 90% kes tutorial terbaik dalam komuniti hebat ini, saya fikir mulai sekarang saya akan bermula di sini dan kemudian di tempat lain.

    salam

    1.    mari gunakan linux kata

      Terima kasih Sander! Pelukan! Paul.

  23.   daryo kata

    dom = hari bulan
    dow = hari dalam seminggu
    lebih senang jika anda bergaul

  24.   Pascual kata

    Terima kasih banyak, sangat lengkap dan dijelaskan dengan baik.

  25.   Maxillia kata

    Ini adalah perkara yang sama yang diberikan oleh guru Sistem Operasi kepada saya, saya tidak mengubah apa-apa, sekarang saya melihat mengapa kelasnya sangat teruk.

  26.   Marcelo kata

    Dianggarkan,

    Pertanyaan, adakah jangka masa tugas dapat dibatasi?
    Contohnya saya mempunyai tugas yang berulang setiap 5 minit, secara berulang jika tugas itu masih aktif, bunuh dan jalankan lagi.

    Terima kasih,
    Marcelo.-

    1.    mari gunakan linux kata

      Helo, Marcelo!

      Saya rasa akan lebih baik jika anda mengemukakan soalan ini dalam perkhidmatan soal jawab yang dipanggil Tanya FromLinux supaya seluruh masyarakat dapat menolong anda mengatasi masalah anda.

      Pelukan, Pablo.

  27.   aj kata

    jawatan yang baik.
    Apakah perintah per terminal untuk menambahkan tugas ke crontab (tanpa memasukkan crontab dan menambahkannya secara manual dengan 'crontab -e' atau menggantikan crontab dengan crontab lain dengan 'crontab file').
    Ideanya adalah untuk membuat skrip luaran untuk menambahkan tugas ke crontab
    Terima kasih

    1.    david kata

      nampaknya saya boleh menggunakan 'echo' apa sahaja yang anda mahu tambahkan '| kucing >> 'path cronotab (/ etc / cronotab)' «

  28.   Raphael Vera kata

    Bagaimana ungkapan dapat dijalankan setiap 3 hari dengan tepat

  29.   José Antonio kata

    Hei.

    Saya menghadapi masalah melaksanakan kerja cron.

    Saya menjalankan tugas berikut dengan cronta -e:

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

    tetapi tugas itu tidak dilakukan. Saya telah memastikan bahawa myfile.sh mempunyai kebenaran pelaksanaan dan pengguna yang melaksanakannya adalah root.

    Saya menjalankan tugas yang sama di / etc / crontab dan selepas memulakan semula perkhidmatan, ia juga tidak berfungsi untuk saya.
    Kandungan myfile.sh adalah arahan yang mengemas kini DB dan jika saya menjalankannya di konsol ia berfungsi.
    ada idea apa masalahnya?

    1.    fredd kata

      Pengguna pangkalan data mungkin tidak mempunyai semua kebenaran dan anda harus terlebih dahulu mengeksport pemboleh ubah persekitaran dari mesin pangkalan data anda.
      Contohnya di db2, baris ini akan menuju ke awal skrip
      . / rumah / db2inst1 / sqllib / db2profile

      Sebab lain adalah skrip memerlukan sambungan ke pangkalan data, membuat sambungan ke pangkalan data dalam skrip

  30.   LA3 kata

    Saya tidak tahu bahawa saya harus memulakan semula crond, saya telah bertengkar dengan ini untuk sementara waktu

  31.   Kenya kata

    Mereka akan tahu bagaimana menunjukkan bahawa tugas itu dijalankan setiap akhir bulan, pada waktu yang dinyatakan .. perinciannya adalah bahawa saya tidak dapat mencapai bagaimana saya tahu bahawa ia memerlukan hari terakhir setiap bulan .. ??? Saya terpaksa menuliskannya satu persatu tetapi apabila akhir bulan Februari tiba, ia adalah rumit ...

  32.   Isa kata

    selamat hari !!

    Bagaimana saya menghentikan proses yang dijalankan di crontab?

  33.   Isa kata

    proses * …………

  34.   Julianna kata

    Mungkinkah anda dapat menolong saya? skrip eu tenho um oleh minha dikarang yang tidak berfungsi tanpa crontab! Je dei semua permis, bukan cron atau pengguna tertentu yang dapat melaksanakannya - hampir tidak ada yang berlaku! Saya ingin tahu jika anda dapat menolong saya, beberapa perkara lain tidak berguna! Vlws

  35.   Anthox kata

    Bagaimana anda menjalankan tugas setiap hari terakhir dalam bulan (hari: 31-30-28)?

  36.   tfercho kata

    Seperti yang sudah anda ketahui, perintah su digunakan untuk menukar pengguna di konsol. Jika saya menggunakan perintah su dengan demikian: "pengguna Anda" ubah pengguna tetapi tanpa pengaturan "pengguna" yang tepat, jika saya menjalankan su sebagai: "su - user" ubah pengguna dengan memuat tetapan pengguna. Dengan cron saya menunjukkan pengguna, tetapi bagaimana saya memuatkan tetapan pengguna ini?

  37.   Rob kata

    Dan jika saya mahu menghentikannya?

  38.   regi kata

    Hello,
    Saya tidak tahu apa yang saya buat salah, tetapi saya mengikuti langkahnya dan tidak ada yang dilaksanakan. Saya dah cuba:
    59 * * * * / usr / bin / gedit
    * * * * * / usr / bin / gedit
    * * * * * root / usr / bin / gedit
    * * * * * usr / bin / test.sh
    * * * * * root usr / bin / test.sh

    dan tidak sama sekali. Ia tidak melaksanakan apa-apa. Saya telah reboot dan semuanya.

  39.   Ferqos kata

    thank you very much