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

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

不过,我后来用cronjob清除这个文件夹(脚本删除readfile()后的下载,但是如果用户取消下载脚本,文件不会被删除,因此cronjob的要点清理这些)。

file_here.zip文件拥有所有者apache权限-rw-r--r-- file_here.ziprandom_hash_folder中的每个random_hash_folder具有所有者apache的权限drwxr-xr-x 。 cronjob只是扫描zip_file_dir,并使用rmdir()unlink()删除文件。

cronjob由用户通过sudo访问服务器来运行(即比apache用户更多的权限和能力)。 但是,当我试图删除文件时,我总是得到PHP“Permission denied”通知。

我已经尝试添加运行cron作业的sudo用户到apache以及我的一些Google研究中其他地方提到的nobody组,但这并没有给我带来任何好运。

任何想法如何让这个cronjob删除这些文件?

编辑:我正在使用RHEL。

你不需要比Apache用户更多的权限和能力。 由于apache用户创build这些文件,apache用户可以销毁它们。 Apache用户似乎是我最合适的用户。

你可以把你的cron作业放在apache用户的crontab( sudo crontab -u apache -e )中,或者作为apache用户从root的crontab运行这个作业:

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

select可帮助您跟踪您的cron作业最简单的选项。

您可以从Apache Web服务器运行cronjob(所以在Cron中只能进行HTTP调用),并且您可以确保在创build文件和文件夹时所有对文件和文件夹的权限都是777。 制作文件夹时,可以指定模式,当创build文件时,可以使其相同。 你也可以在该文件夹上使用setacl,这样两个用户都有权限,并且在文件夹中传播,如下所示:

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

“test”是你的用户,你运行cron。

PS。 忘记sudo,你不需要访问root来做到这一点。