(ログイン時ではなく)起動時に特定のユーザーとしてスクリプトを実行したいと思います。 LaunchDaemonでそれができると思いましたが、「manlaunchd」は次のように述べています。
「サービスを特定のユーザーとして実行したい場合、そのユーザーの環境では、Mac OS Xでこれを実現するためにサポートされている唯一の手段は、サービスを起動エージェントにすることです。つまり、setuid(2)を実行するだけでは不十分です。 )Mac OS Xで本当の意味でのユーザーになること。」
それらは冗談ではありません-LaunchDaemonとしてスクリプトを実行しようとすると、機能しません。特に、「security」コマンドを使用して一部のキーチェーン操作を自動化しようとしています。LaunchDaemonを介してスクリプトを実行すると、デフォルトのキーチェーンを変更できませんが、シェルからSudoを使用して実行するとスクリプトは正常に機能します。
LaunchAgentは機能しません。これは、ユーザーがログインせずにプロセスを実行し、LaunchAgentは誰かがログインしたときにのみ実行されるためです。cronと@rebootディレクティブを確認したところ、有望に見えますが、cronはOSXでは非推奨です。
長時間実行されるプロセスにデフォルトのキーチェーンを使用させようとすると、同様の問題が発生しました。基本的に、LaunchAgentはセキュリティコマンドを実行するための完全なログイン環境で実行されていないようです。そのため、デフォルトのキーチェーンを変更しても機能せず、/Library/Preferences/
ディレクトリでアクセス許可エラーが発生します。
秘密のソースは追加することです:
<key>SessionCreate</key>
<true/>
あなたのplistに。これは文書化されていない機能であり、適切な環境を強制し、デフォルトのキーチェーンを設定できるようにします。 joensson on this question 私を正しい方向に向けてくれたことに感謝します。
グローバルデーモンとして保存(/Library/LaunchDaemons
)とキーUserName
でユーザーを指定します。
<key>UserName</key>
<string>Put username here</string>
他の多くの場所 があり、OS Xのスタートアップ項目を非表示にできます(ほとんどは完全にサポートされていません)。 /etc/rc.local
;パンサーで働いていたことを思い出しているようですので、今日でもうまくいく可能性があります。