由于系統會實時產生文件(如圖片),為了保證數據不會因為系統崩潰或者黑客入侵等原因導致數據丟失,如果使用OSS等文件服務可以不用考慮備份的問題,如果是自己弄的文件服務還是對文件進行定時備份也是有必要的。以下是liunx下面的定時備份文件夾的操作。
1.編輯sh命令,對文件夾進行備份,命令如下:
#!/bin/bash backup_date=$(date +%Y%m%d%H%M%S) # 備份目錄 backup_dir="/backup/file"
# 判斷備份目錄是否存在,如果不存在則創建 if [ ! -d "$backup_dir" ]; then mkdir $backup_dir fi # 執行備份操作,將指定文件夾下的文件復制到備份目錄 cp -R /home/data $backup_dir/data_$backup_date # 壓縮備份文件,并將壓縮文件存儲到備份目錄 tar -czvf $backup_dir/data_$backup_date.tar.gz $backup_dir/data_$backup_date # 刪除備份的文件夾 rm -rf $backup_dir/data_$backup_date #刪除該文件夾下超過30天的文件 find $backup_dir -mtime +30 -name "*.tar.gz" -exec rm -rf {} \; # 記錄備份日志,包括備份日期、備份文件名、備份文件大小等信息 backup_size=$(du -h $backup_dir/data_$backup_date.tar.gz | awk '{print $1}') echo "$backup_date Backup Completed: data_$backup_date.tar.gz ($backup_size)" >> $backup_dir/backup.log
2.創建好備份命令后,需要使用crontab添加定時執行任務,輸入crontab -e 將以下命令添加到最后一行 并且保存即可,系統會在2點0分將執行文件備份的命令
0 2 * * * /backup/backup_file.sh >> /backup/log/backup.log 2>&1 # 每天晚上2點執行文件備份命令,并且保存執行日志(包括錯誤日志)到指定目錄/bakcup/log
3. 遠程備份到其它服務器,后面會記錄如何將文件備份到其它服務器
踩坑記錄:
1. 添加了定時執行任務后,發現一直沒有執行,當前之前的數據庫備份的命令又執行了,后來參考網上說的加個日志輸出,才知道是因為權限不足導致命令執行失敗,解決方法就是給sh文件加可執行權限,使用 chmod +x /backup/backup_file.sh 加上權限即可。
2. 剛開始使用sh backup_file.sh時一直會報錯:無法獲取"/home/examxx\r" 的文件狀態(stat): 沒有那個文件或目錄,目錄明明在存在的,但是一直報這個錯,原因是因為我是在windows環境使用的backup_file.sh文件,然后上傳至liunx服務器上面的,windows與liunx的換行符是不一樣的,所以liunx識別的目錄是包含/r的,解決方法就是在原來linux服務器上面打到一個可以執行的sh文件,然后在這個文件的基礎上去編輯,重新保存即可。
在windows上面創建的文件上傳到liunx上面執行還有可能會這個錯誤:語法錯誤: 未預期的文件結尾,原因和解決方法也和上面的方法一樣,
浙公網安備 33010602011771號