Как запустить однострочную команду оболочки с помощью 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>fooLabel</string>
        <key>Something</key>
        <string>/bin/bash foo -arg 1 -arg 2 &</string>
</dict> 
</plist>

Plist был добавлен, /Library/LaunchDaemonsпоэтому он должен запускаться при загрузке для всех пользователей, верно? Были установлены соответствующие права доступа к файлам .

Сценарий должен работать как фоновый процесс, а также требует подключения к сети. Как я могу убедиться, что plist не запускается, пока не будет установлен доступ в Интернет?

Присоединяйтесь ко мне в чате chat.stackexchange.com/rooms/38/ask-other-chat

Ответы (1)

Вы хотите включить эту проверку состояния сети:

<dict>
  <key>NetworkState</key>
  <true/>
</dict>

Кроме того, вы, вероятно, хотите правильно передать аргументы своей программы:

<key>ProgramArguments</key>
<array>
    <string>/usr/local/bin/binaryname</string>
    <string>arg1</string>
    <string>arg2</string>
</array>
Спасибо за вашу помощь. у меня все еще есть некоторые проблемы. не могли бы вы показать пример использования аргументов для следующей команды?tail -n100 /var/log/foo.log | curl -s --data - http://website.com/upload/ 2>&1 >/tmp/bar
Гораздо проще заключить то, что вы хотите сделать, в скрипт и вызвать его из launchd.