Bagaimana saya bisa mematikan Mac secara paksa pada waktu yang ditentukan?

19

Saya mencari aplikasi penonaktifan otomatis yang akan mematikan komputer pada waktu yang ditentukan.

Bagian terpenting dari ini adalah bahwa shutdown tidak boleh dibatalkan (kecuali prosesnya sangat memberatkan).

Harry
sumber
Apa yang Anda maksud dengan "aplikasi"? Apakah harus program GUI atau launchd (yang saya sarankan di bawah) dapat diterima? Jika Anda melakukan apa aplikasi GUI, apa yang ingin Anda lakukan? Meminta waktu komputer harus dimatikan, saat dijalankan?
TJ Luoma

Jawaban:

25

Ok, jadi lebih jauh ke jawaban saya sebelumnya, saya bisa memandu Anda mendapatkan cron (layanan jadwal UNIX) untuk menjalankan perintah shutdown terjadwal untuk Anda.

Ini akan berjalan sebagai root dan akan dipaksa.

  • Buka Terminal (/ Aplikasi / Utilitas / Terminal)
  • Memasukkan sudo crontab -e

Anda harus memasukkan kata sandi login Anda dan kemudian tekan enter.

Anda sekarang akan berada di editor teks (vim). Masukkan dengan hati-hati penekanan tombol berikut.

  • Tekan isekali (ini memungkinkan Anda memasukkan teks)

Katakanlah Anda ingin mesin mati pada jam 2 pagi setiap hari, kami sekarang akan masuk:

* 2 * * * /sbin/shutdown -h now

Jika Anda ingin mesin dimatikan pada pukul 02:30 setiap hari, Anda akan masuk:

30 2 * * * /sbin/shutdown -h now
  • Saat Anda mengetik ini, tekan esc
  • Lalu tekan shift+ z shift+ z(itu huruf besar "z" dua kali, untuk menulis perubahan dan keluar dari editor)

Anda sekarang harus turun kembali ke baris perintah di mana Anda mulai.

Kamu sudah selesai!

makaco
sumber
Tidakkah kamu perlu menaruhnya di sudosana? Saya tahu itu mungkin akan menyebabkannya tutup, tapi saya cukup yakin Anda harus menjalankan root shutdown.
daviesgeek
Tidak ada pengecualian yang dibutuhkan, itu jawaban yang luar biasa, cukup terkejut, terutama setelah saya membalas dengan kasar. Terima kasih banyak atas bantuan Anda
Harry
3
@daveisgeek - Anda sepenuhnya benar, tetapi perhatikan bahwa kami memulai crontab dengan sudo. Ini berarti bahwa kami sedang mengedit crontab root dan karenanya setiap perintah yang dijadwalkan di dalam akan dieksekusi sebagai pengguna itu.
macaco
Hei, saya melakukan ini, dan pada waktu yang ditentukan saya mendapat dialog yang mengatakan, komputer ini akan mati dalam 10 menit? Dan itu meminta saya untuk membatalkan. Saya tidak tahu apakah itu hasil cron, atau penghemat energi yang juga saya lakukan. Apakah hal cron seharusnya memaksa shutdown tanpa membatalkan dialog?
Harry
3
shutdownadalah di /sbinmana mungkin tidak dalam $ PATH default dari cron. Untuk memperbaikinya, lakukan sudo crontab -ehal itu lagi, ketik dduntuk menghapus baris (dengan asumsi file seperti yang Anda tautkan di atas) dan masukkan kembali baris sebagai 30 22 * * * /sbin/shutdown -h now.
nohillside
13

Namun dapat dibatalkan:


Berhenti di yymmddhhmm:

shutdown -h 1109211555

Hentikan dalam 4 menit:

shutdown -h +4

/Library/LaunchAgents/me.lri.forceshutdown.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>me.lri.forceshutdown</string>
    <key>ProgramArguments</key>
    <array>
        <string>shutdown</string>
        <string>-h</string>
        <string>now</string>

    </array>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>23</integer>
        <key>Minute</key>
        <integer>0</integer>
    </dict>
</dict>
</plist>

Jika plist dimiliki oleh pengguna normal, mencoba memuatnya akan menghasilkan kesalahan launchctl: Dubious ownership on file (skipping):

sudo chown root /Library/LaunchAgents/me.lri.forceshutdown.plist

Agen dapat dimuat dengan keluar dan masuk kembali, atau dengan:

sudo launchctl load /Library/LaunchAgents/me.lri.forceshutdown.plist

sudo crontab -e

`08 16 * * * /sbin/shutdown -h now`

Ini akan melakukan pematian non-paksa yang normal:

osascript -e 'tell app "System Events" to shut down'
Lri
sumber
Ketika menambahkan perintah shutdown ke agen launchd di / Library / LaunchAgents /, itu tidak berfungsi dan 'konsol' akan mencatat 'shutdown: BUKAN super-pengguna'. Mungkin ini akan bekerja di / System / Library / LaunchAgents (tetapi Anda tidak seharusnya meletakkan barang-barang di sana :-)) Saya hanya perlu shutdown normal, jadi saya pergi dengan osascript, dan meletakkannya di ~ / Library / LaunchAgents /bla.shutdown.plist. Bekerja dengan baik.
commonpike
Saya harus menggunakan <code> osascript -e 'beri tahu aplikasi "Finder" untuk mematikan' </code>
commonpike
Ini satu-satunya jawaban yang benar. (Menurut pendapat saya)
SepupuCocaine
9

Ini dapat dijadwalkan di System Preferences> Energy Saver> Schedule . Saya tidak yakin ini akan memulai shutdown paksa, Anda harus mencobanya. Tapi itu adalah opsi bawaan untuk mengotomatiskan down / up daya terjadwal.

  • Anda juga dapat mematikan sistem secara paksa dengan perintah terminal (membutuhkan root):

    shutdown -h sekarang

    Anda bisa memasukkan perintah itu ke tugas terjadwal launchd atau cron . Lihat artikel ini untuk informasi lebih jauh tentang kedua layanan tersebut.

  • Anda mungkin juga ingin memeriksa aplikasi seperti iWannaSleep yang dinamai tepat (tidak yakin apakah ini memaksa shutdown).

makaco
sumber
Apa...??? Saya mencari aplikasi.
Harry
2
Anda mungkin ingin terlihat kurang berterima kasih, tetapi jika Anda membaca ulang jawaban saya, Anda akan melihat bahwa saya merekomendasikan aplikasi dan jika Anda melakukan sedikit riset independen Anda akan melihat bahwa sebenarnya ada beberapa aplikasi lagi yang memiliki kemampuan ini!
macaco
iWannaSleep adalah hasil pertama yang direkomendasikan orang di google, dan itu tidak melakukan apa yang saya inginkan. Dan Anda merekomendasikan saya mempelajari beberapa hal unix untuk mematikan komputer?
Harry
3
Saya merekomendasikannya karena ini adalah cara yang efektif untuk mencapai apa yang Anda inginkan menggunakan alat bawaan. Jika Anda tidak dapat menemukan aplikasi yang sesuai dengan kebutuhan Anda, maka Anda mungkin perlu melihat sesuatu sesuai saran saya.
macaco
1
Penghemat Energi »Jadwal bukan jawaban yang baik, karena akan meminta pengguna 10 menit sebelum shutdown dan menawarkan untuk membatalkan proses.
TJ Luoma
3

Anda dapat menggunakan shutdownsecara langsung untuk menjadwalkan penghentian pada waktu tertentu di masa mendatang:

shutdown -h time

di mana waktu menentukan waktu di masa depan dalam salah satu dari dua format: + angka, atau yymmddhhmm, di mana tahun, bulan, dan hari dapat default ke nilai sistem saat ini. Bentuk pertama membawa sistem ke bawah dalam jumlah menit dan yang kedua pada waktu absolut yang ditentukan.

nohillside
sumber
2
cd ~/Downloads/

curl --remote-name http://dl.dropbox.com/u/18414/ase/com.tjluoma.forceshutdown.plist

# lihat catatan di bawah

sudo mv com.tjluoma.forceshutdown.plist /Library/LaunchAgents

sudo chown root:wheel /Library/LaunchAgents/com.tjluoma.forceshutdown.plist

sudo launchctl load /Library/LaunchAgents/com.tjluoma.forceshutdown.plist

catatan:

Seperti yang tertulis, plist akan menyebabkan komputer dimatikan pada jam 11 malam (waktu setempat) setiap hari.

Jika Anda ingin mengubah waktu, edit skrip dalam editor teks apa pun. Ubah kunci Jam dan Menit, dikutip di sini:

<dict>
    <key>Hour</key>
    <integer>23</integer>
    <key>Minute</key>
    <integer>0</integer>
</dict>

(perhatikan penggunaan waktu 24 jam)

TJ Luoma
sumber
2

Lebih Baik Dijadwalkan Shut Down

Jika Anda ingin mematikan Mac dengan aman pada waktu yang dijadwalkan, pertimbangkan Power Manager ; itu dimatikan dengan baik tanpa membiarkan aplikasi memblokir proses:

  • Semua pengguna aktif diberikan banyak pemberitahuan.
  • Peringatan besar ditampilkan sesaat sebelum dimatikan dimulai.
  • Aplikasi yang berjalan diminta dengan baik untuk berhenti.
  • Aplikasi yang mengabaikan permintaan yang bagus lebih kuat keluar.
  • Logout dibiarkan selesai, sebelum Mac akhirnya dimatikan.

Sangat sulit bagi aplikasi atau proses jahat untuk memblokir langkah-langkah ini.

Kenapa tidak shutdown

Menggunakan shutdownakan memaksa berhenti semua proses pada Mac Anda, termasuk aplikasi grafis. Bagi banyak aplikasi, ini adalah perilaku agresif dan tidak memberikan banyak peluang bagi aplikasi untuk menyimpan keadaan atau data.

Jadwalkan Asisten

Power Manager mencakup tugas Asisten Jadwal untuk mematikan jadwal .

Power Manager - matikan tugas harian

Pengungkapan: Saya bekerja dengan perusahaan yang membuat Power Manager.

Graham Miln
sumber
0

Saya akan melihat catatan teknologi ini oleh Apple

Samantha Catania
sumber
Terima kasih, apa yang harus saya lakukan sekarang?
Harry
Anda dapat menggunakan SendAppleEventToSystemProcess (kAEShutDown) maka Anda dapat menggunakan perintah killall -u username untuk membunuh semua aplikasi (karena Anda tidak ingin itu dibatalkan) Anda mungkin juga ingin memeriksa kelas penghitung waktu: developer.apple.com/library/ mac / # dokumentasi / Kakao / Referensi / ...
Samantha Catania
1
Artikel bagus, tapi OP menolak keras tentang menggunakan cron atau launchd, saya ragu dia mencari kode solusi sendiri untuk masalah ini.
macaco
1
Sementara ini secara teoritis dapat menjawab pertanyaan, akan lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini, dan menyediakan tautan untuk referensi.
daviesgeek