Apache-2.2

使用crontab刪除apache使用者創建的tmp文件夾文件

  • July 9, 2012

目前我已經設置好了,使用者可以從我的站點下載 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的權限。每個in都具有所有者的權限。cronjob 只是掃描 zip_file_dir 並使用和刪除文件。-rw-r--r--``apache``random_hash_folder``zip_file_dir``drwxr-xr-x``apache``rmdir()``unlink()

cronjob 由對伺服器具有 sudo 訪問權限的使用者執行(即比apache使用者擁有更多權限和能力)。但是,在嘗試刪除文件時,我不斷收到 PHP“權限被拒絕”通知。

我已經嘗試將執行 cron 作業的 sudo 使用者添加到我的一些 Google 研究中其他地方提到的apache和組中,但這並沒有給我帶來任何運氣。nobody

任何想法如何讓這個 cronjob 刪除這些文件?

編輯:我正在使用 RHEL。

您不需要比 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 作業的選項。

您可以從 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 的使用者。

附言。忘記 sudo,你不需要訪問 root 來執行它。

引用自:https://serverfault.com/questions/406086