Kapatmadan önce Mac OS X'in bir programı çalıştırmasını nasıl sağlayabilirim?


9

Yeniden başlatıldığında tüm VirtualBox VM'leri kurtarmak için Mac OS X'i almaya çalışıyorum. Bunu yapan bir komut dosyasına zaten sahibim, ancak yeniden başlatmadan önce bu komut dosyasını otomatik olarak çalıştırmak için OS X'e ihtiyacım var.

Mac OS X yeniden başlatıldığında, / sbin / reboot çalışıyor mu?

Veya bu başka nasıl başarılabilir?



Bu bir kopya değil. Çıkış yaparken bir betiği veya programı nasıl çalıştıracağımı bilmek istemiyorum. Kapatırken bir komut dosyası veya programın nasıl çalıştırılacağını bilmek istiyorum.
Andrew J. Brehm

1
Haklısın. Tam bir kopya değil. Bağlantılı sorudaki cevap, kullanıcının komut dosyasını yerleştirmesini tavsiye eder. /etc/rc.shutdown.local Kapatırken çalıştırmak için Aradığın şey bu gibi geliyor.
michaelmichael

Bu site bu iddiada bulunuyor gibi görünüyor: hints.macworld.com/article.php?story=20051013141919568
Andrew J. Brehm

Rc.shutdown.local yöntemi çalışmıyor.
Andrew J. Brehm

Yanıtlar:


5

Her ne kadar Apple kullanmanızı önerir " launchd ", en kolay olanı, örneğin Terminal'in pico'sunu kullanarak bir kabuk betiği oluşturmak:

pico /Users/Shared/logoutHook.sh

Dosya şöyle bir şey içerebilir:

#!/bin/bash
say 'Hasta la vista baby!'

O zaman yürütme hakkı verin:

sudo chmod +x /Users/Shared/logoutHook.sh

Son olarak, betiği çıkış işlemine bağlayın:

sudo defaults write com.apple.loginwindow LogoutHook /Users/Shared/logoutHook.sh

Bunu test etmediğim için başka bir uygulamaya başlarsanız, kendimi ve sizi şu şekilde uyarmanın yararlı olabileceğini düşünüyorum:

  • İstediklerimizi yerine getirmek için kapatma sinyalini öldürmemiz gerekebilir;

  • O zaman yeni bir tane gönder (kendi mesajımızın gönderdiği sinyali öldürmemeye dikkat edin).
    senaryo)…


Kancayı çıkarmak istiyorsanız:

sudo defaults delete com.apple.loginwindow LogoutHook

Kullanıyorsanız " launchd ", fikir SIGTERM sinyalini yakalamak olacaktır. Şuna bir bakın: /System/Library/LaunchDaemons/com.apple.shutdown_monitor.plist


4

Launchd, tüm komut dosyalarına / vardiyalarına kapatma işlemine erken bir uyarı gönderir. StopService () alt yordamı . Bu işleminizi temizlemek için en fazla zaman verir.

Sadece betiği başlatmak ve çıkma zamanı gelene kadar arka planda çalışmasını sağlamak için launchd komutunu kullanın.

Erken uyarı alan servisler kapandıktan sonra, Tüm işlemler bir al SIGTERM önce birkaç saniye SIGKILL onları nükleer bomba

O zaman geldiğinde emrini çalıştırmak için SIGTERM'i tutan ve yakalayan bir senaryo yazabilirsin. Bunun komutların yürütülmesi için pratikte yeterli zaman sağlayıp sağlamadığını görmeniz gerekir. Bu, biraz kodlamadan kaçınır, ancak çok fazla değil - genellikle kabuk komut dosyasından bir arka plan programı yapmak daha iyidir.


Tarihsel açıdan - /sbin/reboot ve çalışma seviyeleri Darwin / OS X’te asla mevcut değildi ve rc.shutdown geri kalanıyla birlikte kullanımdan kaldırıldı rc şimdi launchd patron. Rc.shutdown'ı kaplan veya daha önceki bir sürümde kullanabilirsiniz (Şu anda kontrol etmek için kullanışlı olan bu resimlerden birine sahip değilim) Lion kesinlikle rc.d ve init.d'nin bütün alanlarını kaldırdı.

Görmek isteyebilirsiniz SleepWatcher senin durumunda yardımcı olur. Uzun zamandır kullanmadım - ama kesinlikle ikileminizi çözmeyi amaçlıyor.


"Kullanımdan kaldırıldı" ifadesinin "çalışmadığı" anlamına gelir. :-(
Andrew J. Brehm

Yup - Tiger'da uyarılar başladı ve bence Leopard'la gittiğini tahmin ediyorum - beynimde dolaşan tüm Aslan değişikliklerini hatırlamak zor.
bmike

Bu gerçekten işleri karmaşıklaştırır ve Mac OS X'i çok kötü bir sunucu platformu haline getirir.
Andrew J. Brehm

launchd tamamen kapanırken komut dosyalarını çalıştırabilir. Belki de tarihi düzenlemeli ve bu gerçeği daha açık bırakmalıyım. Launchd hangi şekilde bir betiği kapatırken çalıştırmanız gerekmiyor?
bmike

Kapatma sırasında çalıştırma komut dosyalarını nasıl çalıştıracağımı bilmiyorum. Açılışta işleri başlatmak için launchd komutunu kullanıyorum.
Andrew J. Brehm
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.