我有使用this script设置的MySQL备份任务。使用launchctl时Cron任务错误
当我用sh /{FILEPATH}/backup.sh
手动运行它时,它运行良好,但是当我将任务的plist添加到LaunchDaemons中并将其加载到launchctl
时,它将引发错误。
该任务开始运行(如备份MySQL数据库输出),但在尝试连接数据库时发生错误。
From [email protected] Wed Sep 17 07:00:03 2014
X-Original-To: xxxx
Delivered-To: [email protected]
From: [email protected] (Cron Daemon)
To: [email protected]
Subject: Cron <[email protected]> /{FILEPATH}/backup.sh
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=xxxx>
X-Cron-Env: <USER=xxxx>
X-Cron-Env: <HOME=/Users/xxxx>
Date: Wed, 17 Sep 2014 07:00:01 +0100 (BST)
Loading config file (/{FILEPATH}/mysql-backup.conf)
Backup directory exists (/{FILEPATH}/2014-09-17)
Backing up MySQL databases...
- {database name}...
/{FILEPATH}/backup.sh: line 82: --host=xx.xxx.xx.xx: command not found
Error on or near line 79; exiting with status 1
/{FILEPATH}/backup.sh: line 42: -N: command not found
线的误差是是:
$MYSQLDUMP --host=$HOST --user=$USER --password=$PASS --default-character-set=utf8 --skip-set-charset --routines --disable-keys --force --single-transaction --allow-keywords $database > ${BACKDIR}/${SERVER}-MySQL-backup-$database-${DATE}.sql
,然后再错误此功能:
function checkMysqlUp() {
$MYSQL -N -h $HOST --user=$USER --password=$PASS -e status
}
trap checkMysqlUp 0
这是我的.plist文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>EnvironmentVariables</key>
<dict>
<key>LANG</key>
<string>en_US.UTF-8</string>
</dict>
<key>Label</key>
<string>local.database.backup</string>
<key>Program</key>
<string>/{FILEPATH}/backup.sh</string>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>00</integer>
<key>Minute</key>
<integer>07</integer>
</dict>
</dict>
</plist>
我检查了错误w上的多个线程母鸡使用launchctl
,并确保它具有正确的权限等,文件路径也是绝对正确的(因为该文件在错误发生之前开始运行)
谢谢lossleader,我从一个服务器卷运行备份,该服务器卷上没有定义路径名。我已决定将'sh'文件移动到本地桌面以保留路径,然后将备份保存到卷中。明天早上我会检查一下(一旦任务已经运行),以确认它是否是路径问题。 – 2014-09-30 16:37:13