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
的文件了,開心(✪ω✪)
至此,問題全部解決,完結撒花✿✿ヽ(°▽°)ノ✿