0

我希望有人可以帮助我解决这个问题。我整天都在努力...

我希望 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

4

2 回答 2

0

plist 是否由 root 拥有?如果一个 plist in/Library/Launch{Agents,Daemons}/不属于 root,它可以在没有 的情况下加载launchctlsudo但它不会在登录时加载。

您也可以尝试将 plist 移动到/Library/LaunchAgents/并添加一个LimitLoadToSessionType键:

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

请参阅守护程序和代理技术说明。

于 2013-08-22T06:14:02.600 回答
0

你看到了什么错误?我希望您PATH在这里可能会遇到问题。在哪里mysqldump?如果它在 中/usr/local/bin,那么您可能想要明确说明,或者在/etc/launchd.conf中设置默认路径。

于 2013-08-21T18:30:20.327 回答