如標題所解釋的,我需要每天一次將一個檔案放入 zip 檔案中;此外,zip 檔案必須移動到 /var/www/html 中,其中 .php 腳本允許使用者下載它。
假設:
- 文件的絕對路徑是
/home/myuser/working-directory/file.txt
- 我將使用 cronjobs 運行所需的所有腳本檔案放入
/usr/scripts
sudo crontab -e
我使用, 而不是crontab -e
因為 /var/www/html 需要管理權限而編寫了以下 cronjob
我的思考結果如下:
create-zip.sh
#!/bin/bash
cp /home/myuser/myworkingdir/file.txt /home/myuser/file.txt && cd /home/myuser && zip my-zip-file-$(date "+%b_%d_%Y_%H.%M.%S").zip file.txt && rm file.txt && rm /var/www/html/my-zip-file*.zip && mv my-zip-file*.zip /var/www/html && cd
sudo crontab -e
@daily sh /usr/scripts/create-zip.sh
嗯..這不行。我認為問題與權限有關,因為我被file.txt
複製到 中/home/myuser
,並且還創建了 zip 。但/var/www/html
即使 crontab 在 root 權限下執行,我也無法將 zip 移到。
任何想法?
另外..由於 .zip 每天創建一次,因此我需要從 /var/www/html 中刪除以前的 .zip,然後再將新的 .zip 移入其中。我嘗試使用
rm /var/www/html my-zip-file-*.zip
(檢查上面的 create-zip.sh )但它也不起作用..所以我猜這是權限問題。 /var/www/html 屬於 www-data 群組,其擁有者也是 www-data。
答案1
連線指令&&
意味著只有當左邊的指令成功時,右邊的指令才會運作。這意味著您的 crontab 將在第一次運行時失敗,因為沒有 zip 文件,/var/www/html/
因此rm /var/www/html/my-zip-file*.zip
失敗並且mv
不會執行。
因此,您可以建立一個可以刪除的正確名稱的檔案並保留相同的 cron 命令:
touch /var/www/html/my-zip-file.zip
或者,您可以;
使用&&
:
cp /home/myuser/myworkingdir/file.txt /home/myuser/file.txt &&
cd /home/myuser &&
zip my-zip-file-$(date "+%b_%d_%Y_%H.%M.%S").zip file.txt &&
rm file.txt &&
rm /var/www/html/my-zip-file*.zip ;
mv my-zip-file*.zip /var/www/html && cd
您還使這種方式變得比需要的更加複雜。複製/home/myuser/myworkingdir/file.txt
to/home/myuser/file.txt
是不必要的,因為您只是使用它來壓縮它,然後刪除它。cd
不需要這些命令,您可以使用完整路徑。cd
最後也沒有理由。您所需要的只是一條從目標目錄中刪除所有 zip 檔案的命令和一條壓縮它們的命令:
rm /var/www/html/my-zip-file*.zip &&
zip /var/www/htmlmy-zip-file-$(date "+%b_%d_%Y_%H.%M.%S").zip /home/myuser/myworkingdir/file.txt