シャットダウンする前にMac OS Xでプログラムを実行するにはどうすればよいですか?


9

Mac OS Xで、再起動時にすべてのVirtualBox VMを保存しようとしています。これを行うスクリプトはすでにありますが、再起動する前にこのスクリプトを自動的に実行するにはOS Xが必要です。

Mac OS Xを再起動すると、/ sbin / rebootが実行されますか?

または、他にどのようにこれを達成できますか?



それは重複ではありません。ログアウト時にスクリプトまたはプログラムを実行する方法を知りたくありません。シャットダウン時にスクリプトまたはプログラムを実行する方法を知りたい。
Andrew J. Brehm

1
あなたが正しい。正確な複製ではありません。リンクされた質問の回答は、/etc/rc.shutdown.localシャットダウン時にスクリプトを実行するようにスクリプトを配置することをユーザーにアドバイスしています。それがあなたが探しているもののようです。
michaelmichael

このサイトはその主張をしているようです:hints.macworld.com/article.php?story
Andrew J. Brehm

rc.shutdown.localメソッドが機能しません。
アンドリューJ.ブレーム

回答:


5

Appleは「launchd」の使用を推奨していますが、最も簡単なのは、たとえばターミナルのpicoを使用してシェルスクリプトを作成することです。

pico /Users/Shared/logoutHook.sh

ファイルには次のようなものを含めることができます。

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

次に、実行権限を付与します。

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

最後に、スクリプトをログアウト手順にフックします。

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

私がこれをテストしていないので、別のアプリケーションを開始する場合、私自身とあなたに次のことを警告することは有用だと思います:

  • 必要なものを実行するには、シャットダウン信号を強制終了する必要があるかもしれません。

  • 次に、新しいものを送信します(独自の
    スクリプトによって送信された信号を殺さないように注意してください)…


フックを削除したい場合:

sudo defaults delete com.apple.loginwindow LogoutHook

launchd」を使用する場合、アイデアはSIGTERMシグナルをキャプチャすることです。:見て/System/Library/LaunchDaemons/com.apple.shutdown_monitor.plist


4

Launchdは、StopService()サブルーチンを持つすべてのスクリプト/デーモンにシャットダウンの早期警告を送信します。これにより、プロセスがクリーンアップするのに最も時間がかかります。

launchdを使用してスクリプトを開始し、終了するまでバックグラウンドで実行します。

早期警告を受けたサービスが終了した後、すべてのプロセスは、それらを核とするSIGTERM数秒前にシグナルを受信しSIGKILLます。

スリープしてSIGTERMをトラップするスクリプトを作成し、その時間になるとコマンドを実行することができます。実際にコマンドを実行するのに十分な時間があるかどうかを確認する必要があります。これにより、コーディングは少しは回避できますが、それほど多くはありません。一般的には、シェルスクリプトからデーモンを作成することをお勧めします。


歴史的な観点から- /sbin/rebootそして、ランレベルはダーウィン/ OS Xにrc.shutdownは存在しなかったため、ボスであるrc現在の残りと共に非推奨になりましたlaunchd。tiger以前でrc.shutdownを使用できる場合があります(現在、これらの画像の1つを確認するのに便利なものはありません)。Lionはrc.dとinit.dの痕跡をすべて削除しました。

あなたはsleepwatcherがあなたの場合に役立つかどうかを見たいかもしれません。私はしばらく使用していませんが、それは確かにあなたのジレンマを解決することを目的としています。


「非推奨」とは「機能しない」という意味です。:-(
アンドリューJ.ブレーム

うん-Tigerで警告が始まったので、Leopardでなくなったと思います-ライオンのすべての変更が私の脳の周りで実行されているので思い出すのは難しいです。
bmike

これは本当に問題を複雑にし、Mac OS Xを非常に悪いサーバープラットフォームにします。
アンドリューJ.ブレーム

launchdは、シャットダウン時にスクリプトを実行するための完全な機能を備えています。おそらく、私は歴史を編集して、その事実をより明確にする必要があります。launchdは、シャットダウン時にスクリプトを実行する必要があるのにどのように失敗しますか?
bmike

シャットダウン時にlaunchdを実行する方法を知りません。私はlaunchdを使用して起動時に物事を開始します。
アンドリューJ.ブレーム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.