You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cronjob执行PHP的fwrite写入文件权限问题求助

解决Cron执行PHP脚本时提示文件不可写的权限问题

我遇到过一模一样的问题,核心原因其实不是文件权限本身,而是Cron任务的工作目录和你手动执行脚本时的工作目录不一样!

问题分析

你手动执行php test.php时,是在/home/ec2-user/neu/目录下操作的,所以脚本里的相对路径test.txt指向的是/home/ec2-user/neu/test.txt(也就是你提到的权限为777的那个文件)。但Cron任务默认的工作目录是执行该Cron的用户的主目录(这里是/home/ec2-user/),所以脚本执行时会尝试操作/home/ec2-user/test.txt——这个文件要么不存在,要么权限不符合要求,自然会提示“not writable”。

解决方案(两种任选其一即可)

方案1:在PHP脚本中使用绝对路径

修改test.php里的文件名定义,把相对路径改成绝对路径:

<?php 
$filename = '/home/ec2-user/neu/test.txt'; // 替换为绝对路径
$somecontent = "Add this to the file\n"; 
// 后续代码保持不变...
?>

这样不管脚本在哪个工作目录下执行,都能精准定位到目标文件。

方案2:修改Cron命令,先切换到脚本所在目录

调整你的Cronjob,在执行PHP脚本前先切换到/home/ec2-user/neu/目录:

*/1 * * * * cd /home/ec2-user/neu && /usr/bin/php test.php >> /home/ec2-user/neu/log.log 2>&1

cd /home/ec2-user/neu &&会确保后续命令在正确的目录下执行,脚本里的相对路径就能找到正确的test.txt了。

额外排查(如果以上方案无效)

如果还是不行,可能是SELinux限制导致的(AWS EC2默认可能启用SELinux),可以临时关闭测试:

sudo setenforce 0

如果测试有效,再永久修改SELinux配置(编辑/etc/selinux/config,把SELINUX=enforcing改成SELINUX=permissive),或者给文件添加合适的SELinux上下文:

sudo chcon -t httpd_sys_rw_content_t /home/ec2-user/neu/test.txt

不过这种情况比较少见,优先尝试前两种方案。

内容的提问来源于stack exchange,提问作者Marko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 09:05:11