我使用this script设置了MySQL备份任务。
当我使用sh /{FILEPATH}/backup.sh
手动运行它时运行正常,但是当我将任务的plist添加到LaunchDaemons并将其加载到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
时检查了多个线程的错误,并确保它具有正确的权限等,并且文件路径也是绝对正确的(因为文件在它之前开始运行)误差)
答案 0 :(得分:0)
在常规登录shell中,它可以正常工作,因此您必须在路径中包含以下命令:
# mysql-backup.sh
28 MYSQL=${MYSQL:-`which mysql`}
29 MYSQLDUMP=${MYSQLDUMP:-`which mysqldump`}
30 PHP=${PHP:-`which php`}
而launchtl没有。 (我相信当没有找到任何东西时,which
对STDOUT保持沉默。)
选项强>:
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"