使用 crontabs 在 /var/www/html 中创建 zip 文件

使用 crontabs 在 /var/www/html 中创建 zip 文件

正如标题所解释的,我需要每天将一个文件放入 zip 存档中;此外,还必须将 zip 文件移动到 /var/www/html,其中 .php 脚本允许用户下载它。

假设:

  • 该文件的绝对路径是/home/myuser/working-directory/file.txt
  • 我把需要使用 cronjobs 运行的所有脚本文件放在/usr/scripts
  • 我使用 而不是 来编写以下 cronjob sudo crontab -ecrontab -e因为 /var/www/html 需要管理权限

我的思考结果如下:

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。但是我无法将 zip 移动到/var/www/html,即使 crontab 是在 Root 权限下运行。

任何想法?

另外,由于 .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

相关内容