我有一个简单的 shell 脚本,我试图用它来测试 Galera Cluster 的 MariaDB 节点状态更改通知机制,该脚本在 AWS Ubuntu 20.04 LTS 实例上运行。 该脚本是基于 Galera 提供的示例脚本的精简脚本:
#!/bin/sh -eu
echo "Node Status Change:" > /home/ubuntu/Dan/Notification.txt
while [ $# -gt 0 ]
do
case $1 in
--status)
echo " STATUS=$2" > /home/ubuntu/Notification.txt
shift
;;
--uuid)
echo " CLUSTER_UUID=$2" > /home/ubuntu/Notification.txt
shift
;;
--primary)
echo " PRIMARY=$2" > /home/ubuntu/Notification.txt
shift
;;
--index)
echo " INDEX=$2" > /home/ubuntu/Notification.txt
shift
;;
--members)
echo " MEMBERS=$2" > /home/ubuntu/Notification.txt
shift
;;
esac
shift
done
exit 0
当我自己从命令行运行此脚本时,它会按预期工作,并且 echo 命令参数会写入
/home/ubuntu/Notification.txt
。 但是,当 Galera 通知机制执行它时,它会失败(为简洁起见,删除了日期时间标头):
/etc/mysql/scripts/wsrep_notify.sh: 3: cannot create /home/ubuntu/Dan/Notification.txt: Directory nonexistent
我以运行 MariaDB 的同一用户身份登录,并且
/home/ubuntu/Notification.txt
的权限为 -rw-rw-rw-
。
我尝试将
#!/bin/sh -eu
替换为 #!/bin/bash
,它也可以从命令行正确执行。 但是当 Galera 执行时会失败并出现以下错误:
/etc/mysql/scripts/wsrep_notify.sh: line 3: /home/ubuntu/Notification.txt: No such file or directory
/etc/mysql/scripts/wsrep_notify.sh: line 9: /home/ubuntu/Notification.txt: No such file or directory
/etc/mysql/scripts/wsrep_notify.sh: line 13: /home/ubuntu/Notification.txt: No such file or directory
/etc/mysql/scripts/wsrep_notify.sh: line 17: /home/ubuntu/Notification.txt: No such file or directory
/etc/mysql/scripts/wsrep_notify.sh: line 21: /home/ubuntu/Notification.txt: No such file or directory
/etc/mysql/scripts/wsrep_notify.sh: line 25: /home/ubuntu/Notification.txt: No such file or directory
这些错误非常相似,似乎这两种情况的根本原因是相同的,但我对这个原因可能是什么感到困惑。 脚本显然正在执行,因此脚本文件的安全性不是问题。
想法?
创建目录并使用同一目录两次怎么样?
if [[ ! -d /home/ubuntu/Dan ]]; then
mkdir -p /home/ubuntu/Dan
fi