我有一个用于服务器的备份脚本,如果安装了mysqld
,可以切换到备份mysql数据库。
# If flag is set and executable is installed
if [[ "$flag_s" -eq 1 ]]; then
printf "STATE: Detected flag -s\n" >> "$logfile"
if [[ -x "$(command -v mysqld)" ]]; then
printf "STATE: Starting backup of MySQL databases\n" >> "$logfile"
mysqldump --defaults-extra-file=/custom/files/my.cnf --single-transaction -u root --all-databases | gzip > "$backup_dir"/"$hostname"_"$datetime"_all_mysql_dbs.gz;
else
printf "ERROR: mysqld not installed\n" >> "$logfile"
fi
fi
但是,从root的crontab运行时,它正在运行else语句。在日志中,即使肯定安装了ERROR: mysqld not installed
,我仍然看到mysqld
。脚本的其余部分运行正常(例如,备份目录等)。
如果我以root用户身份运行以下代码,则正确显示mysqld
已安装。
root@db03:~# if [[ -x "$(command -v mysqld)" ]]; then
> printf "STATE: Starting backup of MySQL databases\n"
> else
> printf "ERROR: mysqld not installed\n"
> fi
STATE: Starting backup of MySQL databases
此外,如果我以root身份运行整个脚本,则它可以正常工作。仅在从crontab运行时失败。我想念什么?我需要一个环境变量吗?根目录的PATH是否有问题?
root@db03:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
这是在Ubuntu 18.04 LTS
上运行的bash软件包4.4.18-2ubuntu1.1
。
答案 0 :(得分:1)
尝试一下-添加:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
crontab文件顶部附近的某个地方。