Linux定时任务,执行shell文件失败问题

1 前言

最近一直被别人攻击数据库,ε=(´ο`*)))唉。又不是什么重要数据,怎么一直逮住我不放了。实在没有什么办法了,只能把数据库做做备份,将损失降到最低吧o(╥﹏╥)o

2 编写shell脚本

2.1 创建shell脚本文件
touch xxx.sh
2.2 编辑shell脚本文件
vim xxx.sh

MySQL备份基本命令

mysqldump -uxxx -pxxx dbname > backup.sql

将上面MySQL的基本导出语句的用户名,密码,数据库,导出的SQL文件名补全就可以了(根据自己的需求)

3 创建定时任务

使用crontab命令创建定时任务

crontab -e

我自己设置的是中午11:30与晚上的23:30进行备份,时间根据自己的需求来确定。表达式后面是脚本所在的位置(注意名字与路径的正确)

4 出现的问题

当我觉得万事大吉时,我做了一个测试,将定时任务改成每分钟执行,官产效果。问题出现了。首先并没有导出相应的SQL文件,然后我查看了日志,日志如下

我在网上找这个错误是什么意思,但是基本没有说是什么意思的(发送邮件失败),大多是叫我去找在/var/sppol/cron文件夹下找一个名叫root的文件,下面有具体的报错信息,但是当我去下面找这个文件时,哪里有什么root文件ヽ(ー_ー)ノ

5 解决问题

5.1 重定向找出错误信息

上面的信息是发送邮件报错,没有具体的报错信息。首先我想到的是,可能是我的语句写错了,但是经过一番检验,发现并没有错。那究竟是什么问题呢?

为了找到错误的具体信息,我把语句改成了

mysqldump -uxxx -pxxx dbname > backup.sql >xxx.log 2>&1

将它的标准输出错误输出信息都重定向到了一个日志中

经过一番操作,我发现了日志中的信息

/bin/sh: /usr/xxx.sh: Permission denied

拒绝访问(我是root用户,排除需要root才能执行的原因,然后就在这时突然想到了还有文件的执行权限问题)

查看文件是否有执行权限,结果果然不出所料

马上添加执行权限(看情况添加权限,我只添加了文件所有者的执行权限)

chmod u+x xxx.sh 
5.2 报错仍未解决

终于,这次shell脚本执行了,导出了SQL文件,但是通过查看日志,发现还是会出现mailed 73 bytes of output but got status 0x004b#012这个问题,这是为什么呢?(都快哭了o(╥﹏╥)o)

通过查看maillog,发现了下面的报错

cat  /var/log/maillog

postfix/sendmail[8087]: fatal: parameter inet_interfaces: no local interface found for ::1这是什么错误了(参数inet_interfaces:未找到::1的本地接口),又经过一番查找,终于找到了解决办法
/etc/postfix/main.cf文件中inet_interfaces值改为all

vim /etc/postfix/main.cf

再次查看日志,发现没有报错了,也在/var/sppol/cron文件夹下找到了名叫root的文件了,开心(✪ω✪)

至此,问题全部解决,完结撒花✿✿ヽ(°▽°)ノ✿

Logo

更多推荐