使用 crontab 删除 apache 用户创建的 tmp 文件夹文件

使用 crontab 删除 apache 用户创建的 tmp 文件夹文件

目前,我已将其设置为用户可以从我的网站下载 zip 文件,并且这些文件存储在 中/tmp/zip_file_dir/。PHP 脚本首先使用 从我的 CDN 下载它们ftp_get(),然后将它们放在该文件夹中,例如/tmp/zip_file_dir/random_hash_folder/file_here.zip。然后我只需使用readfile()为用户启动下载即可。一切正常。

但是,我稍后使用 cronjob 来清除该文件夹(脚本会删除之后的下载readfile(),但是如果用户取消下载脚本,则文件不会被删除,因此 cronjob 的目的就是清理这些文件)。

该文件具有所有者的file_here.zip权限。每个文件都具有所有者的权限。cronjob 只需扫描 zip_file_dir 并使用和删除文件。-rw-r--r--apacherandom_hash_folderzip_file_dirdrwxr-xr-xapachermdir()unlink()

cronjob 由具有服务器 sudo 访问权限的用户运行(即比用户拥有更多权限和能力apache)。但是,当我尝试删除文件时,我不断收到 PHP“权限被拒绝”通知。

我尝试将运行 cron 作业的 sudo 用户添加到apachenobody组,正如我在 Google 研究中其他地方提到的那样,但这并没有给我带来任何运气。

有什么想法我可以如何让这个 cronjob 删除这些文件吗?

编辑:我正在使用 RHEL。

答案1

您不需要比 Apache 用户拥有更多的权限和能力。由于 apache 用户创建了这些文件,因此 apache 用户可以销毁它们。在我看来,apache 用户似乎是最合适的用户。

您可以将 cron 作业放入 apache 用户的 crontab ( sudo crontab -u apache -e) 中,或者以 apache 用户身份从 root 的 crontab 运行该作业:

1 5 * * * su apache -c "/path/to/cleanup_script.php"

选择可以帮助您最轻松地跟踪 cron 作业的选项。

答案2

您可以从 Apache Web 服务器运行 cronjob(因此在 Cron 中您只放置 HTTP 调用),也可以确保在创建文件和文件夹时,所有权限均为 777。创建文件夹时,您可以指定模式,创建文件时,也可以指定相同的模式。您还可以在该文件夹上使用 setacl,这样两个用户都拥有权限,并且它会在文件夹中向下传播,如下所示:

# mkdir /tmp/zip_files
# chown apache:apache /tmp/zip_files
# chmod og-rwx /tmp/zip_files
# setfacl -m u:test:rwx zip_files/    # allow test user to enter the folder
# setfacl -m d:u:test:rwx zip_files/  # assure test permissions to created files and folders
# setfacl -m u:test:rwx zip_files/
# getfacl /tmp/zip_files

其中“test”是您运行 cron 的用户。

ps. 忘记 sudo 吧,你不需要以 root 身份来做这件事。

相关内容