2013-08-21 3 views
0

Я надеюсь, что кто-то может мне помочь. Я работаю над этим буквально весь день ...Mac OSX LaunchDaemon при запуске, сценарий оболочки с SSH

Я хочу, чтобы LaunchDaemon выполнял сценарий оболочки при запуске. Вот мой PLIST файл, расположенный на /Library/LaunchDaemons/com.mhi.backup.plist:

<?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.mhi.backup</string> 
    <key>UserName</key> 
    <string>Joel</string> 
    <key>GroupName</key> 
    <string>Admin</string> 
    <key>ProgramArguments</key> 
    <array> 
     <string>/usr/local/bin/mhi_websites_backup.sh</string> 
    </array> 
    <key>RunAtLoad</key> 
    <true/> 
</dict> 
</plist> 

Это правильно выполняется, когда я загрузить его из /Library/LaunchDaemons/com.mhi терминала (launchctl нагрузки. backup.plist), но не при запуске.

Вот мой сценарий, для справки:

#!/bin/bash 
sleep 15 #delay script to ensure time for network connection 
ssh [email protected] << HERE 
    mysqldump -u <user_name> -pPASSWORD --all-databases | lzma > alldatabases.sql.lzma 
    tar cfa backup-`date '+M%mD%dY%y'`.tar.lzma webapps alldatabases.sql.lzma 
    exit 
HERE 
scp [email protected]:backup-`date '+M%mD%dY%y'`.tar.lzma /Users/Joel/Desktop 

Может кто-то пожалуйста, помогите?

Спасибо так много,

JG

+0

Excecute '{set; экспорт; } | sort> cmdLineEnv' и '{set; экспорт; } | sort> startupEnv' для среды, затем 'diff * Env'? Удачи. – shellter

+0

похож на подобный plist на мой, но я положил его в LaunchAgents не LaunchDaemons .. не уверен, в чем разница. –

+0

@shellter Единственная разница в PIPESTATUS. В startupEnv, PIPESTATUS = ([0] = "0" [1] = "0"); в cmdLineEnv, PIPESTATUS = ([0] = "0"). Я понятия не имею, что это значит ... – user1403777

ответ

0

Какие ошибки вы видите? Я бы предположил, что у вас может быть проблема PATH. Где mysqldump? Если он находится в /usr/local/bin, то вы, вероятно, захотите сделать это явным или установить путь по умолчанию в /etc/launchd.conf.

+0

Дамп mysql выполняется на удаленном сервере. Я подозреваю, что проблема может быть связана с тем, что ключ ssh моего пользователя не используется, если среда является корневой, но я не уверен в точном синтаксисе для проверки этой гипотезы. – user1403777

+0

Я понимаю, что вы имеете в виду. LaunchDaemons работают в несколько смешном состоянии, не привязаны к графическому интерфейсу, но они «root» и должны иметь возможность читать '~ root/.ssh'. Есть ли у вас какие-либо ошибки в консоли? –

0

Является ли plist принадлежащим корню? Если plist в /Library/Launch{Agents,Daemons}/ не принадлежит root, его можно загрузить launchctl без sudo, но он не загружается при входе в систему.

Вы также можете попробовать переместить PLIST в /Library/LaunchAgents/ и добавив ключ LimitLoadToSessionType:

<key>LimitLoadToSessionType</key> 
<array> 
    <string>LoginWindow</string> 
    <string>Aqua</string> 
</array> 

См Daemons and Agents техническую записку.

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