Appleはログアウトフックの交換に関心がないようです。ログアウトフックの交換について問い合わせたところ、問題が解決したためです。
ただし、Yosemiteの改善点の1つは、launchdがシグナルをシェルスクリプトに適切に送信するようになったことです。つまり、次のようなログアウトタスクを実行できます。
次にlogout.shの例を示します。
#!/bin/sh
onLogout() {
echo 'Logging out' >> ~/Logs/logout.sh.log
exit
}
trap 'onLogout' SIGINT SIGHUP SIGTERM
while true; do
sleep 86400 &
wait $!
done
これは、トラップされた信号の1つを受信するまで単純にスリープ状態になります(非同期でアンパサンドなしで同期を実行することはできません)onLogout
。その時点で関数が実行されます。
必要なことは、RunAtLoad
起動エージェントまたは起動デーモンを使用してそのスクリプトを起動することであり、ログアウトまたはシャットダウン時に実行されますが、タスクが終了するまでに完了する時間は限られていることに注意してください。 、これは、時間がかかるものや、遅延する可能性のあるネットワーク接続が必要なものの実行には使用しないでください。
もちろん、これはMavericks以前では誰にとっても役に立ちませんが、ヨセミテではこれは期待どおりに動作するようです。だから私は実際にはそもそもそれを正しくやってlaunchd
いて、信号を適切に送信していませんでした:)
注:これを機能させるには、シェルスクリプトを起動によって直接実行する必要があるようsh
です。つまり、-を介して呼び出すべきではありません。したがって~/Library/Scripts/foo.sh
、プログラムに配置した場合、引数は次のようになります。
<key>ProgramArguments</key>
<array>
<string>~/Library/Scripts/foo.sh</string>
<string>bar</string>
</array>
<key>EnableGlobbing</key>
<true/>
line 8: syntax error near unexpected token ;'
と、返されます(セミコロンの前に墓があります)