已安装未检测到mysqld的Bash脚本,但在手动运行时可以运行

时间:2019-06-09 23:36:58

标签: bash shell

我有一个用于服务器的备份脚本,如果安装了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

1 个答案:

答案 0 :(得分:1)

尝试一下-添加:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

crontab文件顶部附近的某个地方。