Linux定时任务,执行shell文件失败问题
最近一直被别人攻击数据库,ε=(´ο`*)))唉。又不是什么重要数据,怎么一直逮住我不放了。实在没有什么办法了,只能把数据库做做备份,将损失降到最低吧o(╥﹏╥)o
touchxxx.sh
1
vim xxx.sh
1
MySQL备份基本命令
mysqldump -uxxx -pxxx dbname>backup.sql
1
将上面MySQL的基本导出语句的用户名,密码,数据库,导出的SQL文件名补全就可以了(根据自己的需求)
使用crontab命令创建定时任务
crontab-e
1
我自己设置的是中午11:30与晚上的23:30进行备份,时间根据自己的需求来确定。表达式后面是脚本所在的位置(注意名字与路径的正确)
当我觉得万事大吉时,我做了一个测试,将定时任务改成每分钟执行,官产效果。问题出现了。首先并没有导出相应的SQL文件,然后我查看了日志,日志如下
我在网上找这个错误是什么意思,但是基本没有说是什么意思的(发送邮件失败),大多是叫我去找在/var/sppol/cron文件夹下找一个名叫root的文件,下面有具体的报错信息,但是当我去下面找这个文件时,哪里有什么root文件ヽ(ー_ー)ノ
上面的信息是发送邮件报错,没有具体的报错信息。首先我想到的是,可能是我的语句写错了,但是经过一番检验,发现并没有错。那究竟是什么问题呢?
为了找到错误的具体信息,我把语句改成了
mysqldump -uxxx -pxxx dbname>backup.sql>xxx.log 2>&1
1
将它的标准输出和错误输出信息都重定向到了一个日志中
经过一番操作,我发现了日志中的信息
/bin/sh: /usr/xxx.sh: Permission denied
1
拒绝访问(我是root用户,排除需要root才能执行的原因,然后就在这时突然想到了还有文件的执行权限问题)
查看文件是否有执行权限,结果果然不出所料
马上添加执行权限(看情况添加权限,我只添加了文件所有者的执行权限)
chmodu+x xxx.sh
1
终于,这次shell脚本执行了,导出了SQL文件,但是通过查看日志,发现还是会出现mailed 73 bytes of output but got status 0x004b#012这个问题,这是为什么呢?(都快哭了o(╥﹏╥)o)
通过查看maillog,发现了下面的报错
cat/var/log/maillog
1
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
1
再次查看日志,发现没有报错了,也在/var/sppol/cron文件夹下找到了名叫root的文件了
转自链接:https://blog.csdn.net/nero_claudius/article/details/102976144
大家有兴趣可以看看我们公司的案例哟,有问题也可以咨询,点击我跳转。