Cara menjadualkan tugas dengan pemasa Systemd di Linux
- 4098
- 291
- Ronnie Hermann
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
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:
- Monotonik
- 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:
- Kali berikutnya pemasa akan berjalan (Seterusnya);
- Berapa kali sebelum pemasa masa depan akan berjalan lagi (DIBIARKAN);
- Kali terakhir pemasa berlari (Terakhir);
- Berapa kali berlalu sejak kali terakhir pemasa berlari (Lulus);
- The
unit pemasa
di mana jadual ditetapkan (Unit); - 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
- « E Tidak dapat mencari pakej - Ralat pemasangan pakej Apt
- Pasang cincin, alternatif Skype Voip Foss »