Macimi belirli bir zamanda zorla nasıl kapatabilirim?


19

Bilgisayarı belirli bir zamanda zorla kapatacak bir otomatik kapatma uygulaması arıyorum.

Bunun en önemli kısmı kapatma işleminin iptal edilememesi gerektiğidir (işlem aşırı derecede zahmetli olmadıkça).


"Uygulama" ile ne demek istiyorsun? Bir GUI programı olmalı mı veya launchd (aşağıda önerdiğim) kabul edilebilir mi? Ne bir GUI uygulaması yaparsanız, ne yapmasını istiyorsunuz? Çalıştırıldığında bilgisayarın kapatılması gereken zamanı sor?
TJ Luoma

Yanıtlar:


25

Tamam, önceki cevabımın ilerisinde, sizin için planlanmış bir kapatma komutu çalıştırmak için cron (yerleşik bir UNIX zamanlama hizmeti) alarak size yol gösterebilirim.

Kök olarak çalışır ve zorlanır.

  • Açık Terminal (/ Uygulamalar / Yardımcı Programlar / Terminal)
  • Giriş sudo crontab -e

Oturum açma parolanızı girmeniz ve ardından enter tuşuna basmanız gerekir.

Şimdi bir metin editöründe olacaksınız (vim). Aşağıdaki tuş vuruşlarını dikkatlice girin.

  • Bir ikez basın (bu metin girmenizi sağlar)

Makinenin her gün saat 2'de kapanmasını istediğinizi varsayalım, şimdi gireceğiz:

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

Makinenin her gün saat 02: 30'da kapanmasını istiyorsanız, şunu girersiniz:

30 2 * * * /sbin/shutdown -h now
  • Bunu yazdığınızda, esc
  • Ardından shift+ z shift+ tuşlarına basın z(değişiklikleri yazmak ve editörden çıkmak için "z" harfi iki kez basılır)

Şimdi başladığınız komut satırına geri dönmelisiniz.

Sen bittin!


sudoOraya koymanıza gerek yok mu? Bunun muhtemelen kapatılmasına neden olacağını biliyorum, ancak emin olmak için kök olmanız gerektiğinden eminim shutdown.
daviesgeek

İstisnalara gerek yok, bu inanılmaz bir cevap, oldukça mutlu bir şekilde şaşırdım, özellikle de kaba bir şekilde cevapladıktan sonra. Yardımınız için çok teşekkür ederim
Harry

3
@daveisgeek - Tamamen haklısınız, ancak cudotab'ı sudo ile başlattığımızı unutmayın. Bu, root'un crontab'ını düzenlediğimiz anlamına gelir ve bu nedenle içindeki tüm zamanlanmış komutlar bu kullanıcı olarak yürütülür.
macaco

Hey, bunu yaptım ve tayin edilen zamanda, bu bilgisayar 10 dakika içinde kapanacak yazan bir iletişim kutusu var mı? Ve iptal etmemi istiyor. Bunun cron olayının sonucu mu, yoksa yaptığım enerji tasarrufu olayı mı olduğunu bilmiyorum. Cron olayının iptal iletişim kutusu olmadan kapanmaya zorlanması mı gerekiyor?
Harry

3
shutdownolduğu /sbincron'nun varsayılan $ PATH içinde muhtemelen olmadığı. Düzeltmek için işlemi sudo crontab -etekrarlayın, ddsatırı silmek için yazın (dosyanın yukarıda bağladığınız gibi göründüğü varsayılarak) ve satırı yeniden girin 30 22 * * * /sbin/shutdown -h now.
nohillside

13

Yine de iptal edilebilir:


Durdur yymmddhhmm:

shutdown -h 1109211555

4 dakika içinde dur:

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>

Plist normal bir kullanıcıya aitse, yüklemeye çalışmak hataya neden olur launchctl: Dubious ownership on file (skipping):

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

Aracı oturumu kapatıp tekrar açarak veya aşağıdakilerle yüklenebilir:

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

sudo crontab -e

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

Bu, zorla çalıştırılmayan normal bir kapatma gerçekleştirecektir:

osascript -e 'tell app "System Events" to shut down'

/ Library / LaunchAgents / içindeki bir launchd ajanına shutdown komutunu eklerken, işe yaramadı ve 'console' 'shutdown: super-user' komutunu günlüğe kaydetmez. Belki de bu / Sistem / Kütüphane / LaunchAgents (ama orada bir şeyler koymak gerekiyordu :-)) işe yarayacaktı Sadece normal bir kapatma gerekiyordu, bu yüzden osascript ile gitti ve ~ / Library / LaunchAgents koymak /bla.shutdown.plist. İyi çalıştı.
commonpike

Yine de <code> osascript -e 'söyle app "Bulucu" kapatmak "</code> kullanmak
zorunda

Tek doğru cevap bu. (Bence)
CousinCocaine

9

Bu, Sistem Tercihleri> Enerji Tasarrufu> Zamanlama'da programlanabilir . Bunun zorunlu bir kapanma başlatacağından emin değilim, denemek zorunda kalacaksınız. Ancak bu, planlanan gücü azaltma / artırma işlemlerini otomatikleştirmek için yerleşik bir seçenektir.

  • Sistemi bir terminal komutuyla da zorla kapatabilirsiniz (root gerektirir):

    kapanma -h şimdi

    Bu komutu bir launchd veya cron zamanlanmış göreve koyabilirsiniz . Bu iki hizmet hakkında daha fazla bilgi için bu makaleye göz atın .

  • Ayrıca zaten adı gibi bir uygulama kontrol etmek isteyebilirsiniz iWannaSleep (değil emin eğer bu kuvvetler kapatma).


Ne...??? Bir uygulama arıyorum.
Harry

2
Daha az nankör görünmek isteyebilirsiniz, ancak cevabımı tekrar okursanız bir uygulama önerdiğimi görürsünüz ve biraz bağımsız bir araştırma yaparsanız aslında bu yeteneğe sahip birkaç uygulama daha olduğunu göreceksiniz!
macaco

iWannaSleep, insanların Google'da önerdiği ilk sonuçtur ve istediğimi yapmıyor. Bilgisayarý kapatmam için bana unix gibi bir ţeyler öđretmeni mi tavsiye ediyorsun?
Harry

3
Bunu öneririm, çünkü yerleşik araçları kullanarak istediğinizi elde etmenin etkili bir yoludur. İhtiyaçlarınıza uygun bir uygulama bulamazsanız, önerim doğrultusunda bir şeye bakmanız gerekebilir.
macaco

1
Enerji Tasarrufu »Zamanlama iyi bir yanıt değildir , çünkü kullanıcıyı kapatmadan 10 dakika önce yönlendirecek ve işlemi iptal etmeyi teklif edecektir.
TJ Luoma

3

shutdownGelecekte herhangi bir zamanda bir kapatma planlamak için doğrudan kullanabilirsiniz :

shutdown -h time

burada saat, iki biçimden birinde gelecekteki bir zamanı belirtir: + sayı veya yymmddhhmm; burada yıl, ay ve gün geçerli sistem değerlerine varsayılan olarak getirilebilir. İlk form sistemi birkaç dakika içinde, ikincisi ise belirtilen mutlak zamanda indirir.


2
cd ~/Downloads/

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

# aşağıdaki nota bakın

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

Not:

Yazıldığı gibi, plist bilgisayarın her gün 23: 00'da (yerel saat) kapanmasına neden olacaktır.

Saati değiştirmek isterseniz, komut dosyasını herhangi bir metin düzenleyicisinde düzenleyin. Burada alıntılanan Saat ve Dakika tuşlarını değiştirin:

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

(24 saatlik zaman kullanımına dikkat edin)


2

Güzel Programlanmış Kapatma

Mac'inizi belirli bir zamanda güvenle kapatmak istiyorsanız , Power Manager'ı düşünün ; uygulamaların işlemi engellemesine izin vermeden güzel bir şekilde kapanır:

  • Tüm aktif kullanıcılara yeterli bildirim verilir.
  • Kapatma başlamadan kısa bir süre önce büyük bir uyarı gösterilir.
  • Çalışan uygulamalardan güzel bir şekilde çıkılması istenir.
  • Güzel isteği göz ardı eden uygulamalar daha kesin olarak kapanır.
  • Mac'in kapatılması için oturumu kapatma işlemi tamamlandı.

Bir sahte uygulama veya işlemin bu adımları engellemesi çok zordur.

Neden olmasın shutdown

Kullanmak shutdown, grafik uygulamaları da dahil olmak üzere Mac'inizdeki tüm işlemlerden çıkmaya zorlar. Birçok uygulama için bu saldırgan bir davranıştır ve uygulamaya durum veya veri kaydetmek için fazla fırsat sağlamaz.

Program Yardımcısı

Power Manager, bir zamanlamayı kapatmak için bir Zamanlama Yardımcısı görevi içerir .

Power Manager - günlük görevi kapat

Açıklama: Power Manager yapan şirketle çalışıyorum.


0

Apple'ın bu teknik notuna bir göz atacağım


Teşekkürler, şimdi ne yapacağım?
Harry

SendAppleEventToSystemProcess (kAEShutDown) kullanabilirsiniz, sonra tüm uygulamaları öldürmek için killall -u kullanıcı adı komutunu kullanabilirsiniz (iptal edilebilir olmasını istemediğiniz için) zamanlayıcı sınıfını da kontrol etmek isteyebilirsiniz: developer.apple.com/library/ mac / # belgeler / Kakao / Referans /…
Samantha Catania

1
Harika bir makale, ancak OP cron veya launchd kullanmaktan korkuyordu, bu soruna kendi çözümünü kodlamak istediğinden şüpheliyim.
macaco

1
Bu teorik olarak soruyu cevaplayabilse de , cevabın temel kısımlarını buraya dahil etmek ve referans için bağlantı sağlamak tercih edilir.
daviesgeek
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.