web-dev-qa-db-ja.com

Snow Leopardを使用してシャットダウン時にスクリプトを実行するにはどうすればよいですか?

Snow Leopardを実行して、iMacをシャットダウンまたは再起動したときにスクリプトを実行したい。

/etc/rc.shutdown.localを使用できるとどこかで読んだのですが、うまくいきません。

たとえば、次の行を追加します。

#!/bin/sh
/usr/bin/osascript -e "set volume with output muted"

私が実行した場合:

source /etc/rc.shutdown.local

それは確かに音をミュートします。ただし、サウンドをオンにしてOSを再起動すると、サウンドはオンのままになります。これは、スクリプトが呼び出されなかったことを意味していると思います。

何か案は?

更新:実際に動作しています。正しい名前がrc.shutdown.localではなくrc.local.shutdownであるからだと思います。

5
user30115

実際に動作しています。正しい名前がrc.shutdown.localではなくrc.local.shutdownであるからだと思います。

2
user30115

別のオプションは、ログアウトフックを使用することです。

Sudo defaults write com.Apple.loginwindow LogoutHook ~/.logouthook
echo $'#!/usr/bin/osascript\nset volume with output muted' > ~/.logouthook
chmod +x ~/.logouthook

LogoutHookキーの値は、実行可能ファイルへのパスのみであり、シェルコマンドではありません。ログアウトフックはスーパーユーザー権限で実行されるため、Sudoは必要ありません。

Defaultsコマンドは、/ var/root/Library/Preferences /com.Apple.loginwindow.plistを変更します。 LogoutHookキーを/Library/Preferences/com.Apple.loginwindow.plistに追加しても機能しません。

ログアウトフックの実行に十分な時間がかかる場合、ログアウトフックが終了するまで灰色の画面が表示されます。ログアウトフックが強制的に終了するまでの時間制限はないようです。

ログアウトフックは10.4で非推奨になりましたが、launchdを使用してログアウト時にプログラムを確実に実行する方法がわかりませんでした。シャットダウンまたは再起動する前にログアウトフックを実行する方法はわかりませんが、ログアウトする前には実行できません。

1
Lri

次のスクリプトを使用します。

#!/usr/bin/env bash
trap 'osascript -e "say \"hello\""' TERM
while true; do
    sleep 10
done

cronまたはlaunchdのどちらかお好みで開始します。

kill pidを使用して強制終了してみてください。pidps axから学習したプロセスIDです。


適切にテストするために今すぐシャットダウンしたくありませんが、should動作します。

0
Daniel Beck

私はAppleScriptの初心者だと言うことから始めます。ですから、他の人々の利益のために、私は以下を投稿します。これは、著者が入力したもののマイナーなバリエーションです。

#!/bin/sh
/usr/bin/osascript -e "set volume 0.5"
0
Whome