Cara menjadualkan tugas dengan pemasa Systemd di Linux

Cara menjadualkan tugas dengan pemasa Systemd di Linux

Cara tradisional untuk menjadualkan tugas di linux, adalah menggunakan daemon cron, menentukan selang waktu dan
Perintah yang akan dilaksanakan di Crontabs.

Systemd, sistem init yang agak baru yang kini diterima pakai oleh semua pengagihan Linux utama, antara lain, memberikan keupayaan untuk menjadualkan tugas menggunakan khusus unit, dipanggil pemasa. Dalam artikel ini kita akan belajar bagaimana mereka berstruktur dan beberapa contoh penggunaannya.

Dalam tutorial ini anda akan belajar:

  • Struktur asas pemasa sistem;
  • Bagaimana untuk membuat pemasa monotonik dan masa nyata;
  • Bagaimana untuk menyenaraikan dan memeriksa pemasa aktif;
  • Bagaimana untuk membolehkan pemasa;
  • Bagaimana menggunakan pemasa sementara;


Keperluan perisian dan konvensyen yang digunakan

Keperluan Perisian dan Konvensyen Talian Perintah Linux
Kategori Keperluan, konvensyen atau versi perisian yang digunakan
Sistem Pengedaran-bebas
Perisian Sistemd
Yang lain Pengetahuan mengenai konsep sistem asas
Konvensyen # - Memerlukan arahan Linux yang diberikan untuk dilaksanakan dengan keistimewaan akar sama ada secara langsung sebagai pengguna root atau dengan menggunakan sudo perintah
$ - Memerlukan arahan Linux yang diberikan sebagai pengguna yang tidak layak

Penggunaan asas



Penjadualan tugas melalui SystemD melibatkan penggunaan dua jenis unit yang berbeza: pemasa dan perkhidmatan. Yang pertama adalah fail unit dengan .pemasa Pelanjutan: Di dalamnya, kami menentukan jadual pekerjaan dan menetapkan unit perkhidmatan yang harus dicetuskan. Yang terakhir adalah jenis unit yang paling biasa: ia digunakan untuk menentukan perkhidmatan mengenai pengagihan Linux moden dan dikenal pasti oleh .perkhidmatan sambungan.

Kami menggunakan unit perkhidmatan untuk menetapkan arahan sebenar yang akan dilaksanakan (jika anda tidak biasa dengan konsep sistem asas, anda mungkin ingin melihat artikel kami mengenai perkhidmatan SystemD).

Bergantung pada bagaimana jadual dibuat, pemasa boleh:

  1. Monotonik
  2. Masa sebenar

Pemasa monotonik

SystemD menyediakan senarai kata kunci yang boleh kita gunakan dalam unit pemasa untuk menjadualkan pelaksanaan tugas beberapa waktu setelah peristiwa yang telah ditetapkan berlangsung. Kata kunci mesti digunakan di [Pemasa] bahagian unit pemasa.

Mari lihat mereka dan jelaskan maksud mereka:



Kata kunci Makna
Onactivesec Jadualkan tugas yang relatif kepada masa apabila unit pemasa itu sendiri diaktifkan
Onbootsec Jadualkan tugas yang relatif kepada masa boot sistem
Onstartupsec Jadualkan tugas yang relatif kepada masa ketika sistem bermula
Onunitactivesec Jadualkan tugas yang relatif kepada kali terakhir unit perkhidmatan aktif
Onunitinactivesec Jadualkan tugas yang relatif kepada kali terakhir unit perkhidmatan tidak aktif

Seperti yang dapat ditebak dengan mudah dari nama kunci, "saat" digunakan sebagai unit lalai masa. Walau bagaimanapun, kita boleh menentukan unit yang berbeza selepas nilai (e.g. 15m - lima belas minit). Seperti yang akan kita lihat kemudian, kata kunci boleh digabungkan di dalam unit pemasa.

Pemasa masa nyata

Acara juga boleh dijadualkan dalam istilah "mutlak", sama seperti bagaimana kita akan menentukannya melalui cron, menggunakan yang lain Oncalendar kata kunci dan pengekodan masa yang dibenarkan.

Berikut adalah beberapa contoh:



Spesifikasi masa Penjelasan
Rabu 18:00:00 Tugas itu akan dilaksanakan setiap hari Rabu jam 18:00
Mon ... Wed *-5-27 Tugas itu akan dilaksanakan pada 27 Mei setiap tahun, tetapi hanya pada hari dari Isnin hingga Rabu
2020-05-27 Tugas itu akan dilaksanakan pada 27 Mei tahun 2020 pada 00:00:00
Thu, Jumaat 2020-*-1,5 11:12:13 Tugas itu akan dilaksanakan pada pukul 11:12:13 dari hari pertama dan kelima setiap bulan tahun 2020, tetapi hanya jika hari itu adalah hari Khamis atau Jumaat
*: 0/2 Tugas akan dilaksanakan setiap dua minit bermula dari minit 0
15/2 Tugas akan dilaksanakan setiap dua jam bermula dari 3:00 petang
setiap jam Tugas akan dilaksanakan pada awal setiap jam
setiap hari Tugas akan dilaksanakan setiap hari pada 00:00:00
setiap minggu Tugas akan dilaksanakan setiap hari Isnin pada 00:00:00
bulanan Tugas akan dilaksanakan pada hari pertama setiap bulan pada 00:00:00

Hari kerja, jika ditentukan, mesti dalam bahasa Inggeris, sama ada dalam bentuk singkat (Wed) atau lengkap (Rabu) (kes itu tidak penting).

Kami dapat memberikan senarai nilai masa menggunakan , watak dan tentukan pelbagai nilai menggunakan . A * watak sepadan dengan nilai. Lebih banyak contoh boleh didapati berunding sistemd.masa Manpage.

Menyenaraikan pemasa aktif

Untuk menyenaraikan semua yang aktif unit pemasa Dalam sistem kami, kami boleh melancarkan Senarai pemasa Subcommand of Systemctl. Melainkan --semua pilihan diserahkan kepada arahan, hanya pemasa aktif yang dimasukkan dalam hasilnya. Berikut adalah contoh output yang dihasilkan oleh arahan:

$ SistemStl List-Timers Seterusnya DIBIARKAN Terakhir Lulus Unit Mengaktifkan Sun 2020-01-19 19:36:06 CET 5H 15min Kiri Sabtu 2020-01-18 10:38:59 CET 1 hari 3H Ago Systemd-Tmpfiles-Clean.Pemasa SystemD-Tmpfiles-Clean.perkhidmatan mon 2020-01-20 00:00:00 CET 9H kiri Sun 2020-01-19 00:00:16 CET 14H AGO MAN-DB.pemasa man-db.Perkhidmatan Mon 2020-01-20 00:00:00 CET 9H Kiri Sun 2020-01-19 00:00:16 CET 14H Ago Shadow.bayangan pemasa.perkhidmatan 

Laporannya sangat terperinci. Ia termasuk 6 lajur, yang menggambarkan, mengikut urutan:

  1. Kali berikutnya pemasa akan berjalan (Seterusnya);
  2. Berapa kali sebelum pemasa masa depan akan berjalan lagi (DIBIARKAN);
  3. Kali terakhir pemasa berlari (Terakhir);
  4. Berapa kali berlalu sejak kali terakhir pemasa berlari (Lulus);
  5. The unit pemasa di mana jadual ditetapkan (Unit);
  6. The unit perkhidmatan diaktifkan oleh pemasa (Mengaktifkan).


Contoh dunia sebenar

Mari kita periksa Man-Db.pemasa pemasa. Untuk memeriksa unit, kita boleh menggunakan SystemCtl dan kucing Subcommand:

$ Systemctl Cat Man-Db.pemasa

Inilah definisi pemasa:

[Unit] Keterangan = Dokumentasi Regenerasi Man-Db Harian = Man: Mandb (8) [Timer] Oncalendar = Daily Accuracysec = 12h Percayalah = Benar [Install] Wanteby = Timers.sasaran 

Perkara pertama yang dapat kita perhatikan ialah [Unit] stanza, yang biasa dengan semua jenis unit sistemd. Di sini ia digunakan untuk memberikan keterangan unit: kita dapat melihat bahawa pemasa digunakan untuk melakukan "penjanaan semula harian manusia-db".

Bahagian yang paling menarik minat kita adalah [Pemasa]. Stanza ini khusus untuk unit pemasa: di sinilah jadual ditakrifkan. The Oncalendar Kata kunci digunakan untuk menetapkan a setiap hari Jadual masa nyata.

Kita juga boleh memerhatikan dua kata kunci lain yang digunakan: Accuracysec dan Berterusan. Yang pertama digunakan untuk mewujudkan kelewatan maksimum di mana perkhidmatan dapat dilancarkan. Dalam kes ini nilainya 12h, Jadi arahan boleh ditangguhkan selama maksimum 12 jam. Nilai lalai untuk Accuracysec adalah 1 minit; Ketepatan terbaik diperoleh dengan 1ns Notasi (1 nanosekond).



Kata kunci yang lain, Berterusan, Mengambil Nilai Boolean: Sekiranya ditetapkan kepada Benar, kali terakhir perkhidmatan itu dicetuskan oleh pemasa diselamatkan ke cakera. Jika atas sebab apa pun, larian yang dijadualkan dilepaskan, pada masa yang akan datang unit pemasa diaktifkan, perkhidmatan itu dilancarkan dengan segera, jika dalam masa berlalu ia akan dicetuskan sekurang -kurangnya sekali. Ini boleh berguna, sebagai contoh, untuk melaksanakan jadual yang terlepas kerana sistem yang dikuasai, pada masa akan datang mesin itu dikuasakan.

Dengan melihat dengan lebih dekat definisi pemasa, kita dapat melihat bahawa perkhidmatan yang akan dicetuskan tidak disebut secara jelas: Apabila ini berlaku, SystemD mencari unit perkhidmatan dengan nama yang sama pemasa (jadi dalam kes ini Man-Db.perkhidmatan). Untuk merujuk unit perkhidmatan secara eksplisit, kita mesti menggunakan Unit kata kunci.

Mengaktifkan pemasa

Mengaktifkan pemasa agak mudah. Yang harus kita lakukan adalah meletakkannya, bersama -sama dengan perkhidmatan itu harus mencetuskan, di dalamnya /etc/Systemd/System direktori. Dengan semua fail di tempat, kami berlari:

$ sudo Systemctl bermula .pemasa

Untuk membuat pemasa secara automatik diaktifkan di boot (atau apabila sasaran khusus lain dicapai), yang perlu kita lakukan adalah memastikan ia mempunyai [Pasang] stanza, di mana kami menentukan apabila pengaktifan harus berlaku.

Dalam contoh di atas Dikehendaki Kata kunci digunakan untuk mewujudkan kebergantungan terbalik (lemah) unit sasaran tertentu (pemasa.sasaran - sasaran yang dicapai awal dalam proses boot) pada unit pemasa yang kami konfigurasi: Sebelum sasaran itu dicapai, unit kami harus diaktifkan.

Pemasa sementara

Adalah mungkin untuk menjadualkan pelaksanaan tugas "dengan cepat", tanpa membuat pemasa dan unit perkhidmatan yang berdedikasi secara manual dengan menggunakan SystemD-Run. Perintah itu mewujudkan unit sementara (mereka tidak akan bertahan dalam reboot) di dalam /Run/SystemD/Transien Direktori jika dijalankan secara global, dan di dalamnya /Run/User // Systemd/Transien Direktori jika dilancarkan sebagai pengguna tertentu (--pengguna pilihan).

Mari lihat contoh. Katakan kami mahukan tarikh dan masa untuk dilog masuk ke fail setiap minit. Kami akan berlari:

$ Systemd-Run --User --on-calendar '*: 0/1'/bin/sh -c "Tarikh >> ~/log.TXT "Pemasa berjalan sebagai Unit: Run-R81A4FEF38154401BBD8CDBD1E5C19D04.Pemasa akan menjalankan perkhidmatan sebagai unit: Run-R81A4FEF38154401BBD8CDBD1E5C19D04.perkhidmatan 

Seperti yang dapat kita lihat dari output arahan, dua unit sementara telah dibuat, RUN-R81A4FEF38154401BBD8CDBD1E5C19D04.pemasa dan RUN-R81A4FEF38154401BBD8CDBD1E5C19D04.perkhidmatan.

Jika kita memeriksa fail log, kita dapat melihat bahawa pemasa berfungsi dengan betul:

$ kucing ~/log.TXT MON 20 Jan 2020 11:20:54 AM CET MON 20 Jan 2020 11:21:54 AM CET MON 20 Jan 2020 11:22:54 AM CET MON 20 Jan 2020 11:23:54 AM CET MON 20 Jan 2020 11 : 24: 54 pagi CET Mon 20 Jan 2020 11:25:54 pagi Cet Mon 20 Jan 2020 11:26:54 AM CET 

Untuk membuang/melumpuhkan a pemasa sementara, Yang harus kita lakukan hanyalah menghentikannya. Dalam kes ini kita akan menjalankan:

$ Systemctl-STOP RUN-R81A4FEF38154401BBD8CDBD1E5C19D04.pemasa

Kesimpulan

Dalam tutorial ini, kami belajar bagaimana kami dapat menjadualkan tugas sistem menggunakan pemasa sistem sebagai alternatif kepada Cronjobs. Kami melihat struktur asas di sebalik pemasa, bagaimana kami dapat menentukan jadual monotonik dan masa nyata melalui kata kunci khusus, seperti Onbootsec atau Oncalendar, Cara menyenaraikan dan memeriksa pemasa aktif, bagaimana untuk membolehkan dan melumpuhkannya.

Akhirnya, kita melihat cara menggunakan pemasa sementara. Dalam artikel ini, anda harus mencari semua yang anda perlukan untuk memulakan dengan pemasa. Untuk maklumat lebih terperinci yang mungkin anda mahukan, bagaimanapun, untuk melihat dokumentasi rasmi, sama ada dalam talian atau dengan berunding sistemd.pemasa Manpage.

Tutorial Linux Berkaitan:

  • Perkara yang hendak dipasang di Ubuntu 20.04
  • Pengenalan kepada Automasi, Alat dan Teknik Linux
  • Perkara yang perlu dilakukan setelah memasang ubuntu 20.04 Focal Fossa Linux
  • Cara Membuat Kerja Cron di Kubernet
  • Mint 20: Lebih baik daripada Ubuntu dan Microsoft Windows?
  • Perkara yang perlu dilakukan setelah memasang Ubuntu 22.04 Jur -ubur Jammy ..
  • Muat turun linux
  • Cara menjalankan arahan secara berkala dengan Anacron di Linux
  • Fail Konfigurasi Linux: 30 teratas yang paling penting
  • Ubuntu 20.04 Trik dan Perkara yang Anda Tidak Tahu