我有一个使用MySQL设置的这个剧本备份任务。
当我用sh /{FILEPATH}/backup.sh手动运行它时,它运行得很好,但是当我在LaunchDaemons中添加了一个带有任务的plist并将其加载到launchctl中时,它会抛出一个错误。
该任务开始运行(从备份MySQL数据库输出中可以看出),但是当它试图连接到数据库时会出错。
From xxxx@xxxx.local Wed Sep 17 07:00:03 2014
X-Original-To: xxxx
Delivered-To: xxxx@xxxx.local
From: xxxx@xxxx.local (Cron Daemon)
To: xxxx@xxxx.local
Subject: Cron <xxxx@xxxxc> /{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>在使用launchctl时,我检查了多个线程的错误,并确保它具有正确的权限等等,并且文件路径也是绝对正确的(因为文件在错误之前就已经开始运行了)
发布于 2014-09-29 16:29:49
在您的常规登录shell中,它可以工作,因此您必须在路径中包含以下命令:
# mysql-backup.sh
28 MYSQL=${MYSQL:-`which mysql`}
29 MYSQLDUMP=${MYSQLDUMP:-`which mysqldump`}
30 PHP=${PHP:-`which php`}而launchtl没有。(我相信which在什么都没有发现的时候对STDOUT保持沉默。)
Options
which mysql、which mysqldump和which php来查找shell中的路径,然后添加路径:# mysql-backup.sh or mysql-backup.conf PATH=[path1]:[path2]:[path3]:$PATH
# (mysql-backup.conf) 35 # Custom path to system commands (enable these if you want use a different 36 # location for PHP and MySQL or if you are having problems running this script) 37 PHP="/opt/local/bin/php" 38 MYSQL="/opt/local/bin/mysql" 39 MYSQLDUMP="/opt/local/bin/mysqldump"
https://stackoverflow.com/questions/25976076
复制相似问题