タイトルが説明するように、ファイルを1日に1回Zipアーカイブに入れる必要があります。また、Zipファイルは/ var/www/htmlに移動する必要があります。このファイルでは、.phpスクリプトを使用してユーザーがダウンロードできます。
これを想定:
/home/myuser/working-directory/file.txt
です/usr/scripts
のcronjobsを使用して実行する必要があるすべてのスクリプトファイルを配置しますSudo crontab -e
の代わりにcrontab -e
を使用して次の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も作成されるため、問題は特権に関連するものだと思います。しかし、crontabがルート権限で実行されていても、Zipを/var/www/html
に移動することはできません。
何か案が?
また、.Zipは1日に1回作成されるため、新しいものをそこに移動する前に/ var/www/htmlから以前の.Zipを削除する必要があります。使ってみた
rm /var/www/html my-Zip-file-*.Zip
(上記のcreate-Zip.shを確認してください)が、それでも機能しません。/var/www/htmlはグループwww-dataに属し、その所有者もwww-dataです。
コマンドを&&
と結合すると、左側のコマンドが成功した場合にのみ右側のコマンドが実行されます。これは、/var/www/html/
にZipファイルがないため、最初に実行したときにcrontabが失敗し、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
を/home/myuser/file.txt
にコピーする必要はありません。Zipに使用してから削除するだけです。 cd
コマンドは不要です。フルパスを使用できます。最後にcd
する理由もありません。必要なのは、ターゲットディレクトリからZipファイルを削除する1つのコマンドと、それらをZipする1つのコマンドだけです。
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