01 前言
由于剛轉(zhuǎn)SCM工作,最近開始折騰學習Shell腳本,作為一名智商非常有限的小白,犯錯是難免的,這里記錄一下自己踩的坑,大佬們不要見笑...
02 踩坑過程
背景:定時備份某個文件夾的數(shù)據(jù),產(chǎn)生日志定向到某個文件中去
編寫的Shell腳本如下:vim auto-backup-jira.sh
# /bin/bash
# 使用shell腳本備份Jira附件,備份周期為7天
# 備份日期
date_backup= ` date "+%Y%m%d" `
# 加入備份數(shù)據(jù)及制定備份路徑
tar -czvf /data/software-data/jira/jira-${date_backup}.tar.gz? /var/atlassian/application-data/jira
if [ $? -eq 0 ] ;then
echo "+++++++++++++SUCCESS!+++++++++++++" >>/data/software-data/jira/jira-backup.log
echo "Jira backup success,end at $(date +"%F%H")" >>/data/software-data/jira/jira-backup.log
else
echo "+++++++++++++FAILED!+++++++++++++" >>/data/software-data/jira/jira-backup.log
echo "Jira backup failed at $(date +"%F%H")" >>/data/software-data/jira/jira-backup.log
fi
find /data/software-data/jira/ -mtime +7 -name "*.tar.gz" -exec rm -rf { } \;
保存退出后,加入定時任務
crontab -e
00 02 * * * /data/software-data/jira/auto-backup-jira.sh
設置每天凌晨2點自動備份,心想完成了一件大事,心里美滋滋...
第二天以來,cd? /data/software-data/jira/ 驚呆了nothing ,查看日志cat? jira-backup.log
也是什么都沒有,說明腳本根本沒有成功執(zhí)行。
開始分析原因:
(一) 權限問題
試著執(zhí)行執(zhí)行了shell腳本 ,進入腳本根目錄
./jira-backup.sh
-bash: ./jira-backup.sh:Permission denied
突然想起來,沒有給這個腳本賦執(zhí)行執(zhí)行權限,于是:
chmod +x jira-backup.sh
試了一下,還是不行,換成這個就可以了:
chmod 777 jira-backup.sh
至此,更改完權限后,修改定時任務時間,執(zhí)行一次,發(fā)現(xiàn):
tar 命令生效了, /data/software-data/jira目錄下生成:jira-20190710.tar.gz
但是日志依然沒有更新到jira-backup.log文件中
重新查看shell,發(fā)現(xiàn)if語句結(jié)構(gòu)不對,調(diào)整一下:
if [ $? -eq 0 ]
then
echo "+++++++++++++SUCCESS!+++++++++++++" >>/data/software-data/jira/jira-backup.log
echo "Jira backup success,end at $(date +"%F%H")" >>/data/software-data/jira/jira-backup.log
else
echo "+++++++++++++FAILED!+++++++++++++" >>/data/software-data/jira/jira-backup.log
echo "Jira backup failed at $(date +"%F%H")" >>/data/software-data/jira/jira-backup.log
fi
重新修改定時任務時間,此時日志生成了....但是查看日志:
Less -N jira-backup.log
1? "+++++++++++++SUCCESS!+++++++++++++"
2? Jira backup success,end at
好奇怪為啥時間沒有顯示出來,睜大眼睛一看,date 命令是錯的,簡直該死
再次調(diào)整
if [ $? -eq 0 ]
then
echo "+++++++++++++SUCCESS!+++++++++++++" >>/data/software-data/jira/jira-backup.log
echo "Jira backup success,end at $(date "+%F%H")" >>/data/software-data/jira/jira-backup.log
else
echo "+++++++++++++FAILED!+++++++++++++" >>/data/software-data/jira/jira-backup.log
echo "Jira backup failed at $(date "+%F%H")" >>/data/software-data/jira/jira-backup.log
fi
終于,所有一切都如愿了...
03 總結(jié)
1)很簡單的一個命令,犯了這么多錯誤,不能拿新手當借口,要養(yǎng)成細心的習慣...
2)期間查問題,有段時間不知道如何下手,在一個QQ群里咨詢后大佬給了一個建議
? ? 打斷點:簡單說就是在每一條命令后面加一個? echo $?? 判斷上面的命令是否執(zhí)行成功,如果結(jié)果返回0,說明上一條命令執(zhí)行成功,如果返回1,說明需調(diào)整