Macの起動時にコマンドラインでSudo
を実行するにはどうすればよいですか?
具体的には、MountainLionで次の行を実行しようとしています。
Sudo ipfw add 100 fwd 127.0.0.1,8080 tcp from any to any 80 in
起動時にコマンドラインツールを実行することについては他にも質問がありますが( this など)、Sudo
と必要な管理者権限/パスワードの問題には対応していません。
他の質問と回答では launchd
について説明していますが、これは、クラッシュした場合に監視して再起動する必要があるデーモンプロセスの場合のようです。対照的に、私は単に1回限りのことをしようとしており、起動時にその1行を1回実行します。
何年にもわたって状況が変わった場合は、MountainLionのような古いバージョンのMacOS Xと、Yosemite/ElCapitanのような新しいバージョンの両方で起動時にSudoを実行するとよいでしょう。
launchedとLaunchDaemonという用語はデーモンのように聞こえますが、すべての下で自動化するための推奨される方法です。 Appleは彼のドキュメントで、
ログインおよびログアウトスクリプトは非推奨のテクノロジーです。ほとんどの場合、起動デーモンとエージェントの作成で説明されているように、代わりに起動ジョブを使用する必要があります
ログインおよびログアウトスクリプトは、一度実行してから終了する必要があるスクリプトです。それらはloginwindowによってトリガーされます。
起動したplistファイルにコマンドを配置するのが正しい方法だと思います。まず、起動エージェントは常にユーザーとして実行されるため、除外できます。スクリプトをrootとして実行する必要があるため、スクリプトを/Library/LaunchDaemons
の下に配置し(/System/Library/LaunchDaemons
も機能しますが、システム....)、フラグRunAtLoad
を追加しますが、設定しないでください。 KeepAlive
(またはcrashedのようなものに設定します この優れたドキュメントを参照 )。
[〜#〜] edit [〜#〜]スクリプトはrootとして実行されているため、別のオプションであるSudo
を省略できます。スクリプトを作成し、それを/etc/sudoers
(visudo
)にnopasswd
フラグを付けて含め、ユーザーとして実行します。
これ 質問にはApple.stackexchange.comでいくつかの良い答えがあります 。
cron
はおそらく設定が最も簡単です。 crontabファイルの特別なエントリ@reboot /path/to/script
を使用すると、cronジョブは起動時にのみ実行されます。上記のリンク先の質問に これを行う方法に関する回答 があります。
launchd
はおそらくここでの正しい解決策です。 canは、これを使用して1回限りのコマンドやスクリプトを実行することもできます。 他の回答の1つ 上記のリンク先の質問では、このためのPropertyListファイルの記述方法を扱っています。 rootとして実行するには、PropertyListを/Library/LaunchDaemons
の下に配置する必要があることに注意してください。