sistemd

Kron Generasi Seterusnya Dengan sistemd Membuat Pemasa

Kron Generasi Seterusnya Dengan sistemd Membuat Pemasa
Adakah anda perlu menjadualkan beberapa tugas pada masa akan datang di komputer anda? Ini mungkin kelihatan sederhana - bagaimanapun, mesin basuh pinggan mangkuk anda boleh menunggu sebelum dilancarkan dengan menggunakan butang - tetapi kadang-kadang komputer membuat tugas mudah seperti itu sangat susah.Tetapi jika anda mempunyai latar belakang, anda mungkin pernah mendengarnya cron, perisian ini dikhaskan sepenuhnya untuk melancarkan tugas yang tepat pada waktu yang tepat. Tetapi alat ini benar-benar direka dengan kesederhanaan dan pada akhirnya anda mungkin mempunyai kejutan buruk.Sekiranya anda berjaya menjadualkan tugas pada Windows, anda telah menggunakan Windows Task Planner. Ia mempunyai GUI secara lalai tetapi tidak begitu mudah digunakan juga: kedua sistem ini hanya melancarkan proses pada waktu dan tarikh yang tetap.

Untuk memahami bagaimana systemd dapat membantu anda di sana, saya akan mengambil contoh.

Perangkap sistemd yang akan mengelakkan anda?

Sekiranya anda pernah memiliki mesin dengan data yang anda minati di dalamnya, anda pasti ingin menyimpan salinan data anda di tempat lain, mungkin lebih selamat. Sekiranya anda menguruskan pelayan, ia adalah wajib: bagaimanapun, bagaimana anda akan pulih jika cakera keras anda gagal dan menghalang anda memulihkan data apa pun?

Oleh itu, sebagai orang yang bertanggungjawab anda menyediakan sandaran setiap minggu atau setiap hari. Anda mungkin menyiapkannya menggunakan cron, anda menjadualkannya pada jam 4:24 pagi, tetapi di sini bermulanya masalah: bagaimana jika pelayan anda dimatikan dari jam 4:10 pagi hingga 4:30 pagi atas sebab apa pun?

Baiklah kemungkinan cron akan melangkau sandaran itu. Ini mungkin kritikal jika perkara itu berlaku secara kerap dan senyap atau jika kod anda bergantung pada fakta bahawa ia berjalan dan mungkin gagal sebaliknya. Umumnya ini berlaku semasa anda menyiapkan tugas pembersihan melalui cron dan ia tidak dilancarkan. Tiba-tiba kod anda mungkin tidak mempunyai ruang yang mencukupi untuk meneruskan dan akan rosak - sungguh menyedihkan, sungguh menyedihkan, betul Encik Elton John.

Namun, jika pelancaran yang terlepas boleh menjadi masalah, bayangkan satu saat - wow, John Lennon sekarang? - bahawa tugas anda terlalu lambat. Sekiranya tugas anda ditetapkan untuk dijalankan setiap 10 minit tetapi memerlukan 15 minit untuk diselesaikan, cron atau Windows dengan senang hati akan melancarkan tugas lain walaupun tugas semasa belum selesai - dan demikian, anda akan mempunyai 2 kejadian tugas anda berjalan serentak , yang mana satu resipi yang sempurna untuk musibah. Apabila program dijalankan secara serentak sementara tidak dirancang untuk melakukannya, kemungkinan besar fail yang rosak, perisian lain, pangkalan data - dan pelayan anda tiba-tiba menjadi kapal tenggelam seperti Titanic.

OK, mungkin saya terlalu jauh dengan Titanic tetapi anda mendapat idea. Walaupun systemd tidak dapat melakukan banyak perkara untuk menyelamatkan kapal ini, ia dapat membantu anda dengan semua kekurangan ini dan memastikan anda percutian Krismas lebih lama berkat bug yang akan mengelakkan anda. Sudah tiba masanya untuk mengetahui cara mengatur pemasa sistemd.

Cara menjadualkan sandaran pelayan automatik?

Pertama sekali, pemasa sistemd memicu perkhidmatan sistemd, jadi sebelum menjadualkan tugas anda, anda perlu menjadikannya sebagai perkhidmatan terlebih dahulu. Nasib baik, saya telah menulis panduan untuk membuat perkhidmatan systemd, dengan cara ini akan memperkenalkan anda dengan cara kerja systemd. Anda mesti membacanya sebelum meneruskan. Kecuali jika anda betul-betul tahu apa yang anda lakukan, fail perkhidmatan systemd anda semestinya tidak mengandungi sebarang tetapan WantedBy =. Sekiranya anda ingin memulakan perkhidmatan anda pada waktu tertentu, anda mungkin tidak mahu memulakannya secara boot.

Terima kasih kepada sistem perkhidmatand, tidak mungkin terdapat beberapa kes tugas yang anda jalankan secara tidak sengaja: jika tugas sudah berjalan, tugas itu hanya akan dilangkau dan meninggalkan tugas yang sedang berjalan menyelesaikan tugasnya.

Sebaik sahaja anda mempunyai perkhidmatan systemd untuk dijadwalkan, buat fail dengan nama fail yang sama dengan perkhidmatan anda kecuali yang harus diakhiri dengan .pemasa dan bukannya .perkhidmatan. Dalam contoh sandaran automatik kami, perkhidmatan tersebut akan menjadi sandaran automatik.perkhidmatan dan pemasa akan automatik-sandaran.pemasa. Kedua-dua fail harus berada dalam direktori yang sama. Seperti yang saya katakan dalam artikel perkhidmatan systemd, saya mengesyorkan anda menulis fail ini di tempat biasa seperti direktori rumah anda dan kemudian, salin ke folder sistemd, setelah selesai mengedit.

Oleh itu, izinkan saya menunjukkan seperti apa fail pemasa kami:

[Unit]
Penerangan = Jadualkan sandaran semasa waktu sibuk
[Pemasa]
OnCalendar = * - * - * 03:00:00
RandomizedDelaySec = 7200
Berterusan = benar
[Pasang]
WantedBy = pemasa.sasaran

Sama seperti dalam perkhidmatan systemd, terdapat 3 bahagian. [Unit] atau [Pasang] berfungsi sama seperti yang dijelaskan dalam artikel perkhidmatan systemd saya. Harap maklum bahawa WantedBy = penting di sini kerana pemasa boleh dimulakan atau dihentikan, jadi jika anda tidak memberitahu systemd untuk memulakan pemasa anda semasa boot, ia tidak akan pernah mencetuskan. pemasa.target adalah target systemd khas untuk pemasa.

Sekarang, bahagian [Pemasa]. Di dalamnya, anda akan menemui semua tetapan yang berkaitan dengan kapan pemasa harus dicetuskan. Untuk sandaran automatik kami, saya telah memberitahu systemd untuk menjalankannya antara jam 3 pagi hingga 5 pagi di zon waktu pelayan. Waktu yang tepat adalah secara rawak setiap hari.

OnCalendar = menetapkan pemasa yang berkaitan dengan waktu pelayan anda (jam dinding), seperti setiap hari Ahad pukul 13:00. Sekiranya anda pernah menggunakan cron sebelumnya, anda semestinya sudah biasa dengan sintaks ini. Namun ia mempunyai beberapa faedah tambahan.

Contohnya, jika anda mahukan sesuatu berlaku setiap jam, anda boleh melakukan seperti ini:

OnCalendar = setiap jam

dan setiap hari:

OnCalendar = setiap hari

Sebenarnya, ia menyokong semua nilai berikut:

  1. dengan teliti
  2. setiap jam
  3. setiap hari
  4. bulanan
  5. setiap minggu
  6. setiap tahun
  7. setiap suku tahun
  8. setiap setengah tahun

Namun ada masalah dengan kata kunci ini: sebagai contoh, pencetus harian selalu tengah malam, yang sering menjadi waktu puncak dalam sistem pengkomputeran. Itulah sebabnya disyorkan untuk menggunakan RandomizedDelaySec = (penggunaannya dinyatakan di bawah). Bagaimanapun untuk cadangan itu bukan pilihan yang baik: tengah malam tidak lewat waktu sibuk, sebaliknya sebaliknya. Oleh itu, kita perlu mengatur dengan lebih tepat apabila kita mahu melihat tugas itu dilancarkan.

Sekiranya anda mahukan lebih banyak kawalan, anda boleh menulis tarikh seperti 2018-12-06 12:49:37. Sekiranya anda begitu spesifik, anda hanya akan mencetuskan pemasa sekali. Untuk menjadikannya berulang, anda akan mengganti salah satu elemen ini dengan * tanda bintang.

OnCalendar = * - * - * 03:00:00

Seperti yang anda lihat di atas, dalam contoh sandaran kami, semua bahagian tarikh adalah * - * - *, yang bermaksud ia mesti berlaku setiap hari setiap bulan setiap tahun. Sekarang jika anda melakukan:

OnCalendar = * - 12-25 03:00:00

Kemudian dijalankan setiap 25 Disember jam 3 pagi. Pemasa sistemd yang sempurna untuk Santa Claus - walaupun saya ragu dia akan memerlukannya! Jadi asterisk menambahkan berulang di mana anda meletakkannya. Sekiranya anda memasukkannya ke bidang tahun, itu bermaksud "setiap tahun", dll.

Akhirnya, anda boleh menambahkan UTC di hujung baris untuk menggunakan waktu UTC dan bukannya zon waktu tempatan. Sebagai contoh, beberapa perkhidmatan menetapkan semula kuota API mereka pada tengah malam tetapi untuk mengelakkan bias zon waktu yang menggunakan UTC. Oleh itu, untuk tugas seperti itu, anda akan melakukan:

OnCalendar = UTC setiap hari

Sekarang, mari kita selesaikan masalah lain: waktu sibuk. systemd juga mempunyai pengaturan untuk melawannya.

RandomizedDelaySec = membolehkan untuk melambatkan tugas dalam jumlah masa yang rawak. Nilainya adalah bilangan saat maksimum yang akan ditangguhkan oleh pemasa. Ia bertujuan khusus untuk kes seperti itu. Anda ingat bahawa dalam systemd, setiap hari selalu berlaku pada tengah malam? Nah, mingguan selalu berlaku pada Isnin tengah malam, dan pencetus tahunan pada 1 Januari tengah malam, salah satu puncak terburuk pada tahun ini dengan gangguan rangkaian di mana-mana. Anda pasti tidak mahu perkara itu berlaku.

Dengan menambahkan kelewatan, anda akan menghilangkan masalah itu: secara automatik akan menunda pada waktu yang tidak diketahui tugas anda. Keacakan di sini adalah mustahak kerana ia jauh lebih mungkin berlaku walaupun secara rawak dan beban yang sama memungkinkan untuk mengoptimumkan tugas anda dengan lebih baik.

Katakan anda perlu menjalankan tugas anda sekitar jam 7 pagi untuk waktu pagi tetapi anda mahu membiarkan sedikit kelewatan maksimum 15 minit, anda akan melakukan seperti ini:

RandomizedDelaySec = 900

Itu sudah cukup untuk kelewatan. Kadang-kadang kelewatan milisaat pun cukup untuk mengelakkan lonjakan yang tidak diingini.

Berterusan = menjaga pencetus pemasa yang terlepas. Bagaimana jika pelayan anda dimatikan pada waktu malam? Baiklah, sandaran tidak akan pernah dicetuskan sama sekali. Menetapkannya menjadi benar membolehkan systemd menjalankannya pada but seterusnya dalam kes seperti itu. Dengan cara ini anda tahu dalam satu atau lain cara, tugas pemasa akan dijalankan. Penggunaannya mudah, anda hanya melakukan ini:

Berterusan = benar

Walau bagaimanapun, ini mempunyai satu kelemahan yang sangat sukar untuk dielakkan: apabila banyak tugas dari pemasa yang berlainan terlepas, semuanya akan berjalan semasa boot dan melambatkan boot itu. Pada pendapat saya itu jauh lebih baik daripada jika ia tidak pernah berjalan dan setelah semua itu normal, saat yang paling tepat untuk menjalankan pemasa adalah ketika ia dijadualkan, selepas itu mungkin akan tetap tidak sesuai.

OnBootSec = adalah pilihan terakhir yang akan saya tunjukkan (tetapi tidak sedikit). Ini jika anda ingin mencetuskan pemasa beberapa saat selepas boot dan bukannya berdasarkan kalendar. Sebagai contoh, jika anda perlu memeriksa permulaan jika pelayan anda dimulakan dengan baik dan berfungsi seperti yang diharapkan, anda boleh menulis perkhidmatan cek dan menggunakan tetapan pemasa untuk mencetuskannya setelah sistem mempunyai cukup waktu untuk boot.

Katakan sistem memerlukan 3 minit untuk boot, anda boleh lakukan:

OnBootSec = 180

Walaupun namanya, anda juga boleh melakukan:

OnBootSec = 3 minit

Sekiranya anda menentukan kedua-dua OnBootSec = dan OnCalendar =, ia akan memulakan perkhidmatan setiap kali 2 peristiwa ini berlaku.

Baiklah, sekarang saatnya untuk menyimpan fail anda, salin ke folder sistem jika anda mengikuti nasihat saya di atas, dan uji apakah pemasa anda berfungsi dengan baik.

Dayakan pemasa dan pemantauan baru anda

Untuk menguji pemasa baru anda, anda harus memberitahu sistem bahawa anda telah menambahkan pemasa baru, jadi anda perlu menaip perintah ini:

$ sudo systemctl daemon-reload

Sekarang, systemd akan mengambil kira pemasa baru anda dan melihat dengan teliti kapan menjalankan tugas anda. Oleh kerana systemd selalu berjalan, ini adalah salah satu calon terbaik untuk mengurus dan menjalankan tugas yang dijadualkan.

Satu perkara yang mungkin anda anggap berlawanan dengan intuisi: pemasa secara lalai dilumpuhkan. Untuk mengaktifkannya, anda perlu melakukan arahan ini:

$ sudo systemctl aktifkan - kini sandaran automatik.pemasa

Anda kemudian mungkin ingin melihat apakah pemasa anda bertindak seperti yang diharapkan. Berita baik: systemd cukup baik untuk mempunyai arahan yang memberitahu anda kapan terakhir dilancarkan dan kapan pelancaran seterusnya dijadualkan (kecuali jika pemasa diatur untuk berjalan hanya pada boot, kerana systemd tidak tahu kapan sistem akan boot lagi, jelas). Inilah arahannya:

$ sistemctl status automatik-sandaran.pemasa

Akhirnya, apabila anda tidak lagi memerlukan pemasa, anda juga boleh melumpuhkannya:

$ sudo systemctl nonaktifkan - kini sandaran automatik.pemasa

Kesimpulannya

Dengan menggunakan pemasa sistem, pengurusan tugas yang dijadualkan anda ke tahap yang seterusnya: sejujurnya, saya secara peribadi merasakan tugas yang dijadualkan seharusnya seperti ini sejak bertahun-tahun.

Oh, satu kejutan untuk anda: semua pemasa sistemd dilog masuk dalam sistem yang tersusun dengan penapisan, putaran log dan seumpamanya. Oleh itu, saya menjemput anda untuk melihat bagaimana anda dapat melihat log mengenai tugas yang dijadualkan!

Pasang permainan Strategi OpenRA terkini di Ubuntu Linux
OpenRA adalah mesin permainan Strategi Masa Nyata / Bebas yang mencipta semula permainan Westwood awal seperti Command & Conquer klasik: Makluman Mera...
Pasang Dolphin Emulator terkini untuk Gamecube & Wii di Linux
Dolphin Emulator membolehkan anda memainkan permainan Gamecube & Wii pilihan anda di Komputer Peribadi Linux (PC). Menjadi emulator permainan sumber ...
Cara Menggunakan Mesin Cheat GameConqueror di Linux
Artikel ini merangkumi panduan mengenai penggunaan mesin cheat GameConqueror di Linux. Ramai pengguna yang bermain permainan di Windows sering menggun...