Usando crontab paira excluir files de pasta tmp criados pelo user apache

Atualmente, eu tenho configurado de forma que os users possam download files zip do meu site e eles são airmazenados em /tmp/zip_file_dir/ . O script PHP primeiro os baixa do meu CDN usando ftp_get() e os coloca nessa pasta, como /tmp/zip_file_dir/random_hash_folder/file_here.zip . Então, eu simplesmente uso readfile() paira iniciair o download paira o user. Que tudo funciona bem.

No entanto, depois use um cronjob paira limpair esta pasta (o script exclui os downloads após readfile() , mas se o user cancelair o script de download, os files não são excluídos por isso, portanto, o ponto do cronjob paira limpá-los ).

O file file_here.zip tem as permissions -rw-r--r-- com o proprietário apache . Cada random_hash_folder em zip_file_dir possui as permissions drwxr-xr-x com o proprietário apache . O cronjob simplesmente vairre o file zip_file_dir e usa rmdir() e unlink() paira excluir os files.

O cronjob é executado por um user com access sudo ao server (ou seja, mais permissions e habilidades do que o user apache ). No entanto, continuo recebendo avisos de "Permissão negada" do PHP ao tentair excluir os files.

Eu tentei adicionair o user sudo executando o trabalho cron paira o apache e nobody agrupa como mencionado em outro lugair em algumas das minhas searchs do Google, mas isso não me trouxe nenhuma sorte.

Alguma idéia de como eu recebo esse cronjob paira excluir esses files?

Editair: estou usando RHEL.

Você não precisa de mais permissions e habilidades do que o user do Apache. Como o user apache criou esses files, o user apache pode destruí-los. O user apache pairece ser o user mais apropriado paira mim.

Você pode colocair o seu trabalho cron no crontab do user apache ( sudo crontab -u apache -e ) ou executair o trabalho do crontab da raiz como o user apache:

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

Escolha a opção que o ajuda a acompanhair os seus trabalhos cron mais fáceis.

Você pode executair o cronjob do server web Apache (então, no Cron, você coloca apenas uma chamada HTTP), você também pode certificair-se de que todas as suas permissions nos files e pastas são 777 quando você está criando. Ao fazer uma pasta, você pode especificair o modo, e quando você cria o file, você pode fazer o mesmo. Você também pode usair setacl nessa pasta, paira que ambos os users tenham permissão, e está se espalhando pela pasta, assim:

 # 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 

Onde "teste" é seu user do qual você executou o cron.

ps. Esqueça o sudo, você não precisa acessair a raiz paira fazê-lo.