launchctl / plistを使用して再起動時に複数のコマンドを実行する方法


6

OS Xでは、plistファイルは ~/Library/LaunchAgents/ (あるいは、あなたがそれを操作するのを好むパーミッション/ユーザーに応じて、似たようなもの)、そしてそれを使ってロードする launchctl 再起動時に機能するようにします。しかし、plistファイルに複数のコマンドを定義することは可能ですか。その場合は、どうすれば定義できますか?

たとえば、次のような一連のPythonプログラムを実行したいとします。

python first_script.py

そして、最初のスクリプトが終了した後にスクリプトを実行したいのですが(この2つのスクリプトを2つの異なるplistファイルに定義することはできません)。

python second_script.py

私はOS X Mavericks 10.9.2を使っています。

ボーナス

これは私が今したいことではなく、好奇心以外には何もありませんが、最初のプログラムの結果によっては2番目のプログラムを実行することも可能ですか?だから、例えば:

python first_script.py

そしてこのスクリプトが成功すると:

python second_script.py --result true

そしてそれが失敗した場合:

python second_script.py --result false --reason XXX

スクリプトを呼び出すためのスクリプトを書く - 順番にスクリプトを書く - あるいはもっと複雑な場合はpythonを使って直接モジュールを呼び出すlanchdからこの呼び出しスクリプトを呼び出します
Mark

回答:


7

他のコマンドを起動するシェルコマンドを実行します。

<?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>some.label</string>
  <key>ProgramArguments</key>
  <array>
    <string>bash</string>
    <string>-c</string>
    <string>python first_script.py;python second_script.py</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

またはを変更する ProgramArguments への鍵

<key>Program</key>
<string>/path/to/script</string>

そしてこのようなスクリプトを使用します。

#!/bin/bash

output=$(python first_script.py 2>&1)
if [[ $? = 0 ]]; then
  python second_script.py --result true
else
  python second_script.py --result --false --reason "$output"
fi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.