2015-02-26 2 views
1

Привет всем и спасибо за это. У меня есть ниже Plist запуска программНа моем конце с 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>com.me.sendip</string> 
<key>Program</key> 
<string>/Users/me/Documents/sendip.sh</string> 
<key>StartInterval</key> 
<integer>60</integer> 
<key>StandardErrorPath</key> 
<string>/Users/me/Desktop/sendiperr.log</string> 
<key>StandardOutPath</key> 
<string>/Users/me/Desktop/sendip.log</string> 
</dict> 

Я также иметь ниже сценарий

/Users/me/Documents/Scripts/ip.sh | mail -s "Laptop ip" [email protected] 

Я Пытался поиск неисправностей со всеми инструментами here. Скрипт запускается с пустым файлом журнала при загрузке, но после этого ничего.

Кто-то, пожалуйста, помогите. Я полностью в тупике, и я уверен, что это что-то глупое. Очень признателен.

+0

Каков выходной файл '/ Users/me/Documents/Scripts/ip.sh' ** перед **, он отправляется на почту? –

ответ

1

Оказывается, запуск программ оставляет суб-процессы сценария я пытался бежать. это общая проблема, как выясняется. Found the answer here.

1

Хммм. Я запускаю сценарий по часовым интервалам, используя следующий plist в 10.9.5.

<?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>Disabled</key> 
    <false/> 
    <key>Label</key> 
    <string>org.myorg.mytask</string> 
    <key>ProgramArguments</key> 
    <array> 
     <string>/usr/bin/php</string> 
     <string>/path/to/myscript.php</string> 
    </array> 
    <key>QueueDirectories</key> 
    <array/> 
    <key>StartCalendarInterval</key> 
    <dict> 
     <key>Minute</key> 
     <integer>5</integer> 
    </dict> 
    <key>WatchPaths</key> 
    <array/> 
</dict> 
</plist> 

Это работает каждый час через 5 минут после часа.

Я думаю, что вы хотите запустить раз в минуту, не так ли? Так что ваша версия будет:

<?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>Disabled</key> 
    <false/> 
    <key>Label</key> 
    <string>com.me.sendip</string> 
    <key>ProgramArguments</key> 
    <array> 
     <string>/Users/me/Documents/sendip.sh</string> 
    </array> 
    <key>QueueDirectories</key> 
    <array/> 
    <key>StartInterval</key> 
    <integer>60</integer> 
    <key>WatchPaths</key> 
    <array/> 
</dict> 
</plist> 

Вы, возможно, потребуется запустить службу, выполнив эту команду в терминале: (это потребует пароль)

sudo launchctl load com.me.sendip 

Edit: Вот скрипт с более явным протоколированием:

#!/bin/bash 

OUTFILE='/Library/Logs/com.whatever.sendip.log' 
ERRFILE='/Library/Logs/com.whatever.sendip.err.log' 

SCRIPT='/Users/me/Documents/Scripts/ip.sh' 
TARGET_EMAIL='[email protected]' 
TARGET_SUBJECT='Laptop ip' 

VERBOSE=1 

if [ "$VERBOSE" -ne 0 ]; then 
    date >>"$OUTFILE" 
    date >>"$ERRFILE" 

    echo -n 'Current user: ' >>"$OUTFILE" 
    whoami >>"$OUTFILE" 
fi 

INFO=$("$SCRIPT" 2>>"$ERRFILE") 

echo "$INFO" | mail -s "$TARGET_SUBJECT" "$TARGET_EMAIL" >>"$OUTFILE" 2>>"$ERRFILE" 

ERROR_CODE="$?" 

if [ "$ERROR_CODE" -ne 0 ]; then 
    echo "Result: Error Code $ERROR_CODE" >>"$OUTFILE" 
    echo "Info: $INFO" >>"$OUTFILE" 
elif [ "$VERBOSE" -ne 0 ]; then 
    echo "Result: Success" >>"$OUTFILE" 
    echo "Info: $INFO" >>"$OUTFILE" 
fi 
+0

Спасибо за ваш ответ. Попробует. Да, я знаком с launchctl и как загрузить, выгрузить, перечислить, контролировать файл журнала и многое другое. Его простой скрипт и должен работать. Я могу только думать, что я неправильно форматирую plist. –

+0

Пробовал ваше предложение, спасибо btw, но тот же результат, он срабатывает и не запускается снова - ни одно письмо не отправляется. Сценарий срабатывает, когда я выполняю его из командной строки за пределами файла plist и отлично работает. –

+0

еще странность. Я обнаружил, что путь к файлу был неправильным - все та же проблема. странная вещь - ошибка не отображается в файле журнала. я. нет. Понимаю. сценарий теперь срабатывает в соответствующее время, каждые 60 секунд, но все равно ничего не посылает. –

Смежные вопросы