web-dev-qa-db-ja.com

Mac OSXの起動/起動時に `Sudo`コマンドを実行します

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を実行するとよいでしょう。

2
Basil Bourque

launchedとLaunchDaemonという用語はデーモンのように聞こえますが、すべての下で自動化するための推奨される方法です。 Appleは彼のドキュメントで、

ログインおよびログアウトスクリプトは非推奨のテクノロジーです。ほとんどの場合、起動デーモンとエージェントの作成で説明されているように、代わりに起動ジョブを使用する必要があります

ログインおよびログアウトスクリプトは、一度実行してから終了する必要があるスクリプトです。それらはloginwindowによってトリガーされます。

起動したplistファイルにコマンドを配置するのが正しい方法だと思います。まず、起動エージェントは常にユーザーとして実行されるため、除外できます。スクリプトをrootとして実行する必要があるため、スクリプトを/Library/LaunchDaemonsの下に配置し(/System/Library/LaunchDaemonsも機能しますが、システム....)、フラグRunAtLoadを追加しますが、設定しないでください。 KeepAlive(またはcrashedのようなものに設定します この優れたドキュメントを参照 )。

[〜#〜] edit [〜#〜]スクリプトはrootとして実行されているため、別のオプションであるSudoを省略できます。スクリプトを作成し、それを/etc/sudoersvisudo)にnopasswdフラグを付けて含め、ユーザーとして実行します。

3
Schwertspize

これ 質問にはApple.stackexchange.comでいくつかの良い答えがあります

cronはおそらく設定が最も簡単です。 crontabファイルの特別なエントリ@reboot /path/to/scriptを使用すると、cronジョブは起動時にのみ実行されます。上記のリンク先の質問に これを行う方法に関する回答 があります。

launchdはおそらくここでの正しい解決策です。 canは、これを使用して1回限りのコマンドやスクリプトを実行することもできます。 他の回答の1つ 上記のリンク先の質問では、このためのPropertyListファイルの記述方法を扱っています。 rootとして実行するには、PropertyListを/Library/LaunchDaemonsの下に配置する必要があることに注意してください。

2
fredrikhl