🎃

launchd で環境変数を定義するには "EnvironmentVariables" Key を記述する

2022/08/24に公開

macOS 10.10(Yosemite)以後、どうやら launchctl 経由でコマンドを実行する場合、環境変数を指定するには launchd.plistEnvironmentVariables という key をセットする必要があるようです。

複数の環境変数も <dict> 内にまとめて記載できるので安心。

ソースコード内に含みたくない固有の変数は、こうやって環境変数で指定しておけば、幾文か安心でしょう。例えば、こんな感じで、OAuth 用の CONSUMER KEYSECRET KEYACCESS TOKEN などを指定して実行するのに向いてます。

PATH/usr/local/bin などは通ってなかったりするので、ここで定義しても良いかもしれませんね。

com.setenv.test.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Label</key>
        <string>com.setenv.test</string>
        <key>EnvironmentVariables</key>
        <dict>
                <key>CONSUMER_KEY</key>
                <string>N...............i</string>
                <key>SECRET_KEY</key>
                <string>O...............Q</string>
                <key>TRACE</key>
                <string></string>
        </dict>
        <key>ProgramArguments</key>
        <array>
                <string>/bin/bash</string>
                <string>/Users/sho/bin/test_setenv.sh</string>
        </array>
        <key>StartInterval</key>
        <integer>600</integer>
        <key>StandardOutPath</key>
        <string>/Users/sho/logs/test_setenv.out</string>
        <key>StandardErrorPath</key>
        <string>/Users/sho/logs/test_setenv.err</string>
        <key>WorkingDirectory</key>
        <string>/Users/sho/bin<string>
</dict>
</plist>

参考: Sierraでlaunchdにpathが通らない - 橋本商会

Discussion