Linux定时任务,执行shell文件失败问题&&mailed 73 bytes of output but got status 0x004b#012报错解决
Linux定时任务,执行shell文件失败问题1 前言最近一直被别人攻击数据库,ε=(´ο`*)))唉。又不是什么重要数据,怎么一直逮住我不放了。实在没有什么办法了,只能把数据库做做备份,将损失降到最低吧o(╥﹏╥)o2 编写shell脚本2.1 创建shell脚本文件touch xxx.sh2.2 编辑shell脚本文件vim xxx.shMySQL备份基本命令mysqld...
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
的文件了,开心(✪ω✪)
至此,问题全部解决,完结撒花✿✿ヽ(°▽°)ノ✿
更多推荐
所有评论(0)