使用 crontab 在 /var/www/html 中建立 zip 文件

使用 crontab 在 /var/www/html 中建立 zip 文件

如標題所解釋的,我需要每天一次將一個檔案放入 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.txtto/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

相關內容