次のlaunchctlコマンドを.plistファイルとして持っています。ロードされ、1日に1回実行されるように設定されていますが、rootとして実行する必要があり、これを確認する方法がわかりません。
また、このcronジョブは基本的にCDをディレクトリーに入れてコマンドを実行します。 launchdには、コマンドを実行することになっているディレクトリを指定するより良い方法があると確信しています。
これがルートとして実行されていることをどのように知ることができますか?これを書くより良い方法はありますか?
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.Apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>dev.project.frontpage.feedparser</string>
<key>ProgramArguments</key>
<array>
<string>cd</string>
<string>/Users/eman/src/project/trunk/includes/;</string>
<string>./feed-parser.php</string>
<string>-c</string>
<string>./feed-parser-config.xml</string>
</array>
<key>QueueDirectories</key>
<array/>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>12</integer>
<key>Minute</key>
<integer>0</integer>
</dict>
<key>WatchPaths</key>
<array/>
</dict>
</plist>
.plist
はどのフォルダに保存されていますか?
launchd
はデーモン(/Library/LaunchDaemons
または/System/Library/LaunchDaemons
)をrootとして実行し、ユーザーがログインしているかどうかに関係なくデーモンを実行します。起動エージェント(/Library/LaunchAgents/
または~/Library/LaunchAgents/
)は、ユーザーがそのユーザーとしてログインしたときに実行されます。デーモンでスクリプトを実行しているユーザーを変更するためにsetuidを使用することはできません。
/Library/LaunchDaemons
に追加するため、管理者権限でlaunchd
にロードする必要があります(例:Sudo launchctl load -w /Library/LaunchDaemons/com.Apple.samplelaunchdscript.plist
)
詳細については、man launchd
をご覧ください。
LaunchAgentsのプロパティリストも機能しますが、エージェントとデーモンの両方をSudoでロードする必要があります。
Sudo chown root /Library/LaunchAgents/test.plist
Sudo launchctl load /Library/LaunchAgents/test.plist
Plistに無効なキーがない場合、次のログイン時にロードされるか、デフォルトで再起動され、-w
は必要ありません。
デーモンは、システム全体の一部としてバックグラウンドで実行されるプログラムです(つまり、特定のユーザーに関連付けられていません)。デーモンはGUIを表示できません。より具体的には、ウィンドウサーバーへの接続は許可されていません。
[...]
エージェントは、特定のユーザーに代わってバックグラウンドで実行されるプロセスです。エージェントは、ユーザーのホームディレクトリに確実にアクセスしたり、ウィンドウサーバーに接続したりするなど、デーモンができないことを実行できるので便利です。
LaunchControl ヨセミテで私にとってそれは苦痛のないものになりました。サービスの作成または編集に役立つ、ニースのドラッグアンドドロップGUIがあります。私が知らないすべてのサービスが実行されているのを見るのは驚くべきことでした。
手順