我有一个 linux shell 脚本,当从命令行运行时可以完美运行,但是当计划通过 crontab 运行时,它不会给出预期的结果。
该脚本非常简单,它通过使用 pidof 命令检查它的 pid 来检查 mysql-proxy 是否正在运行。如果发现关闭,它会尝试启动代理。
# Check if mysql proxy is off
# if found off, attempt to start it
if pidof mysql-proxy
then
echo "Proxy running."
else
echo "Proxy off ... attempting to restart"
/usr/local/mysql-proxy/bin/mysql-proxy -P 172.20.10.196:3306 --daemon --proxy-backend-addresses=172.20.10.194 --proxy-backend-addresses=172.20.10.195
if pidof mysql-proxy
then
echo "Proxy started"
else
echo "Proxy restar failed"
fi
fi
echo "==============================================="
该脚本保存在文件check-sql-proxy.sh中,权限设置为777。当我从命令行(sh check-sql-proxy.sh)运行脚本时,它会给出所需的输出。
4066
Proxy running.
===============================================
该脚本还计划在 crontab 中每 5 分钟运行一次
*/5 * * * * bash /root/auto-restart-mysql-proxy.sh > /dev/sql-proxy-restart-log.log
但是,当我看到 sql-proxy-restart-log.log 文件时,它包含输出:
Proxy off ... attempting to restart
Proxy restar failed
===============================================
似乎pidof命令无法返回正在运行的应用程序的 pid,这使脚本流处于 else 状态。
我无法弄清楚如何解决这个问题,因为当我手动运行脚本时,它工作正常。
任何人都可以帮助我在权限或设置方面缺少什么吗?
提前致谢。穆达瑟