Docker容器中Cron执行MySQL重启脚本失败问题求助
各位好,我碰到一个头疼的问题,想请教下大家:我有一个基于Ubuntu系统的Docker容器,里面装了MySQL,现在需要每天自动重启一次MySQL,本来打算用cron来实现,但遇到了奇怪的问题——手动在容器CLI里运行重启脚本完全正常,但通过cron执行就报错找不到service命令。
我的环境与背景
- Docker容器:Ubuntu系统,已安装MySQL
- 需求:每天自动重启MySQL服务
- 重启脚本路径:
/usr/local/bin/mysqlRestart
重启脚本内容
#!/bin/bash echo "Stopping MySQL" service mysql stop sleep 15s echo "Starting MySQL" service mysql start sleep 10s echo "MySql Restarted" service mysql status sleep 10s
手动执行结果(完全正常)
我在容器的命令行里执行以下命令:
./mysqlRestart >>/var/log/mysqlRestart 2>&1
日志输出显示MySQL能正常停止并重启:
Stopping MySQL
Stopping MySQL database server mysqld ...done.
Starting MySQL
Starting MySQL database server mysqld su: warning: cannot change directory to /nonexistent: No such file or directory ...done.
MySql Restarted
/usr/bin/mysqladmin Ver 8.0.30-0ubuntu0.20.04.2 for Linux on x86_64 ((Ubuntu)) Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.
Server version 8.0.30-0ubuntu0.20.04.2 Protocol version 10 Connection Localhost via UNIX socket UNIX socket /var/run/mysqld/mysqld.sock Uptime: 11 sec
Threads: 2 Questions: 8 Slow queries: 0 Opens: 119 Flush tables: 3 Open tables: 38 Queries per second avg: 0.727
Cron执行结果(报错)
我先设置了一个测试用的定时任务(每5分钟执行一次),在crontab -e里添加的内容:
*/5 * * * * bash /usr/local/bin/mysqlRestart >>/var/log/mysqlRestart 2>&1
但执行后日志里全是找不到命令的报错:
Stopping MySQL /usr/local/bin/mysqlRestart: line 4: service: command not found
Starting MySQL /usr/local/bin/mysqlRestart: line 7: service: command not found
MySql Restarted /usr/local/bin/mysqlRestart: line 10: service: command not found
有没有大佬知道为什么手动执行正常,cron执行就找不到service命令?应该怎么解决这个问题?
备注:内容来源于stack exchange,提问作者James Tavendale

