例如我写了一个脚本backup.sh,脚本内部包含有 service apache2 stop , systemctl start apache2 , rsync , mysqldump 等命令。手动执行 backup.sh 是能供正常执行里面的所有命令的,但使用定时任务 Crontab 执行脚本backup.sh,service,systemctl,相关的这些命令均无法执行,其他命令例如 rsync,mysqldump 这些却都可以正常执行的奇怪问题。
最近偶尔查看了一下syslog日志发现我一直使用的备份脚本定时任务报错:CRON[44480]: (CRON) info (No MTA installed, discarding output)
可是定时备份却一直都能正常运行,这个脚本用了很长的时间,一直都没有注意日志的报错信息,因为无论是数据库,网站数据文件,都能正常的按照脚本命令进行备份,偶尔在今天才发现syslog日志这里的报错信息!
实际上我这几天折腾Lsyncd实时同步备份的时候就已经觉得有点怪怪的问题,因为我查看Lsyncd日志文件的时候,没有发现Lsyncd有停止与启动的日志记录。执行定时备份数据库与Rsync备份整站数据的时候,我先命令停止Lsyncd与apache2,再执行数据库与网站数据的备份。但是Lsyncd没有停止与启动的日志记录,难道这个问题不奇怪吗?明明是命令无法执行才会没有日志记录,所以最后终于发现确实是命令无法执行导致的。
解决方法:
Crontab定时任务执行的脚本里,需要停止的服务,必须写实际路径!
/etc/init.d/apache2 stop
即可正常执行。
知道即可,详细理由,以后有空再研究。

