【发布时间】:2013-08-21 18:16:05
【问题描述】:
我希望有人可以帮助我解决这个问题。我一整天都在努力……
我希望 LaunchDaemon 在启动时执行 shell 脚本。这是我的 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>
当我从终端加载它时它正确执行(launchctl load /Library/LaunchDaemons/com.mhi.backup.plist),但不是在启动时。
这是我的脚本,供参考:
#!/bin/bash
sleep 15 #delay script to ensure time for network connection
ssh user@hostname << 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 user@hostname:backup-`date '+M%mD%dY%y'`.tar.lzma /Users/Joel/Desktop
有人可以帮忙吗?
非常感谢,
JG
【问题讨论】:
-
对每个环境执行
{ set ; export ; } | sort > cmdLineEnv和{ set ; export ; } | sort> startupEnv,然后diff *Env?祝你好运。 -
看起来和我的 plist 相似,但我把它放在 LaunchAgents 而不是 LaunchDaemons 中。不知道有什么区别。
-
@shellter 唯一的区别在于 PIPESTATUS。在startupEnv中,PIPESTATUS=([0]="0" [1]="0");在 cmdLineEnv 中,PIPESTATUS=([0]="0")。我什至不知道这意味着什么......
-
@JustinMeiners 当我将 plist 放入 LaunchAgents 时,脚本运行。但是,它只在登录时运行,而不是在启动时运行。我希望脚本在启动时执行,无论用户是否登录。
-
这很难在没有看到实际错误的情况下进行调试。指定
StandardErrorPath和StandardOutPath。我确信解决方案就在那里。
标签: macos shell launchd launch-daemon