shutdown pada tanggal tertentu

11

Saya tahu bahwa Anda dapat menjadwalkan penghentian untuk waktu tertentu melalui shutdown -h 21:45dan bahwa Anda tidak boleh menggunakan crontab untuk hal-hal seperti itu karena sifatnya yang berulang. Bagaimana saya bisa menjadwalkan penghentian untuk tanggal tertentu seperti 31 Agustus pukul 20:00?

Unggah HdM
sumber

Jawaban:

7

Versi Ubuntu terbaru menggunakan systemd dan ketika penjadwal konvensional atddan yang terkait atuntuk perintah sekali saja tidak diinstal atau tidak menjalankan perintah sekali saja dapat dijadwalkan dengansystemd-run yang agak lebih mudah daripada secara manual menghasilkan systemd timer:

 systemd-run --on-calendar="2019-08-31 20:00:00 CET" /sbin/shutdown now
HBruijn
sumber
2
Ironisnya, memulai seluruh layanan untuk melakukan ini hampir tidak perlu. mekanisme shutdown systemd itu sendiri mendukung titik arbitrer dalam waktu. Alat baris perintahnya tidak menyediakan kemampuan untuk mengakses ini, karena tidak sesuai dengan baris perintah BSD shutdown. Seperti yang saya tulis dalam jawaban lain, Anda yang menginginkan ini dapat mencoba membujuk orang-orang systemd untuk membuat shutdownalat mereka lebih mampu, dengan sintaks berdiri puluhan tahun, daripada berkeliling rumah dengan systemd-run.
JdeBP
Saya mendapatkan spesifikasi kalender tidak valid: 2019-08-31 20:00:00 CET
HdM Upload
12

The atperintah untuk penjadwalan satu dari eksekusi masa depan.

misalnya

% at 8pm Aug 31
at> echo hello
at> <EOT>
job 161 at Sat Aug 31 20:00:00 2019

("<EOT>" diproduksi dengan menekan control-D)

% atq
161     Sat Aug 31 20:00:00 2019 a sweh

Anda dapat menempatkan shutdownperintah Anda di sini.

Stephen Harris
sumber
Iya! Saya sudah lupa atketika saya memposting - atpasti dimaksudkan untuk ini secara umum, meskipun di perusahaan metode yang diterima mungkin atatau cron, tergantung pada konvensi yang terkait dengan manajemen konfigurasi / penyebaran.
flow2k
Tidak persis sama, perhatikan. unix.stackexchange.com/q/465322/5132
JdeBP
atjuga mampu mengambil perintah dari pipa: echo "echo yup > $(tty)" | at now.
Mosvy
7

Meskipun atcara yang jelas untuk melakukan ini, saya pikir itu akan bertahan shutdowns, jadi jika mesin reboot sebelum shutdown yang dijadwalkan, itu mungkin shutdown lagi pada waktu yang dijadwalkan. Oleh karena itu, menggunakan tanggal bash dan GNU kita dapat menggunakan shutdown tertunda.

/sbin/shutdown +$(( ( $( date -d "30 may 2019 13:15" +%s ) - $( date +%s ) ) / 60 + 1 ))

NB: Ini hanya akurat untuk satu menit. Ini bekerja dengan mengubah waktu yang dijadwalkan, dan sekarang menjadi detik sejak zaman UNIX, menghitung perbedaannya, mengubahnya menjadi menit, dan kemudian menggunakan ini sebagai penundaan untuk mematikan. Ini tidak akan berfungsi dengan benar jika waktu yang dijadwalkan di masa lalu.

CSM
sumber
3

Anda menggunakan shutdownperintah yang lebih baik .

Perintah van Smoorenburg, Upstart, dan systemd shutdowntidak mengizinkan spesifikasi tanggal. Tetapi shutdownperintah BSD mengambil nilai tanggal dalam spesifikasi kapan harus dimatikan, dalam formulir yymmddhhmm. Ini telah menjadi kasus sejak 4BSD, dan tetap demikian dengan FreeBSD dan OpenBSD. NetBSD memperluasnya ke ccyymmddhhmm.

Karena nosh toolset juga dapat digunakan pada BSD, saya memberi shutdownperintah saya kemampuan yang sama, memperluasnya ke CCYYMMDDHHMMper NetBSD. Dan karena nosh toolset juga dapat digunakan di Linux, itu memberi Linux perintah shutdown yang membutuhkan tanggal.

Ini tentu saja bekerja dengan nosh system-manager. Ini juga bekerja dengan beberapa sistem lain. Ini mengirimkan sinyal ke proses # 1 untuk memberlakukan hal-hal dan sinyal yang sama dipahami oleh beberapa manajer sistem lain, seperti systemd, yang juga dapat dimatikan menggunakannya.

Anda bisa menggunakannya, atau alat seperti itu; atau Anda bisa mencoba meyakinkan penulis shutdownprogram Linux lain untuk memperluas alat mereka agar juga mampu seperti BSD shutdown.

Bacaan lebih lanjut

  • Jonathan de Boyne Pollard (2018). shutdown. halaman manual toolset nosh. Perangkat lunak.
  • Jonathan de Boyne Pollard (2018). system-manager. halaman manual toolset nosh. Perangkat lunak.
  • shutdown. Manual Manajer Sistem . Halaman Manual NetBSD. 2011-11-04.
  • shutdown. Manual Manajer Sistem FreeBSD . 2018-01-01.
  • shutdown. Halaman Manual OpenBSD. 2015-01-21.
  • /unix//a/465337/5132
JdeBP
sumber
1

Untuk menjalankan pekerjaan hanya tahun ini:

0 20 31 8 * test $(/bin/date +\%Y) = "2019" && /sbin/shutdown now

Untuk menjalankan pekerjaan setiap tahun:

0 20 31 8 * /sbin/shutdown now
Freddy
sumber
-4

Mungkin ada opsi untuk memasukkan tahun ke shutdownperintah, tetapi cron dapat digunakan untuk menjalankan perintah hanya sekali pada titik waktu tertentu. Sebagai contoh Anda, cobalah

0 0 31 8 ? 2019  shutdown

Hati-hati: di atas bukan sintaks cron standar.

flow2k
sumber
2
1. Ini tidak mengatakan 20:00, katanya tengah malam. 2. Saya belum pernah melihat cronjob dengan bidang ENAM untuk waktunya. Implementasi cron apa yang Anda referensikan?
Wildcard
2
Tidak ada yearbidang dalam crontabjadwal
Seamus
Saya menyadari setelah itu sintaks ini bukan "cron standar", jadi saya setuju, itu tidak boleh diambil pada nilai nominal. OP tampaknya menyiratkan ada penalti kinerja yang terkait dengan penggunaan cron, jadi dalam Jawaban saya, saya berusaha mengklarifikasi - tidak ada inheren tidak efisien tentang implementasi cron yang membuat tidak cocok untuk tugas sekali saja. Apakah ini yang Anda pikirkan juga?
flow2k