artisan日志 root 权限解决办法
php artisan 生成的日志是root权限,导致正常的系统日志没有权限写入,解决办法是根据用户来区分不同的日志,在bootstrap/app.php中写入以下配置:
$app->configureMonologUsing(function(Monolog\Logger $monolog) {
$filename = storage_path('logs/laravel-'.php_sapi_name().'.log');
$handler = new Monolog\Handler\RotatingFileHandler($filename);
$monolog->pushHandler($handler);
});
本作品采用《CC 协议》,转载必须注明作者和本文链接
高认可度评论:
正确的做法应该是用 www 用户执行 artisan 命令,因为不光是日志,还有可能有缓存、 storage 等文件可能被 root 用户创建而导致 www 用户无权操作。
不想使用单独的用户配置 crontab,也可以这么干,比如:配置在 root 账号下
正确的做法应该是用 www 用户执行 artisan 命令,因为不光是日志,还有可能有缓存、 storage 等文件可能被 root 用户创建而导致 www 用户无权操作。
除了楼上所说的一系列问题,还有安全问题不容忽视,用 root 账号执行命令,脚本所拥有权限非常大,如果遭遇恶意脚本,整站就呵呵了
@leo 请教一下,我把脚本写在crontab中的,如果我想用www用户执行artisan命令,我应该怎么写crontab呢
@gedongdong2010
crontab -e -u www
@leo 如果用这个方式的话可能后续有人接手很容易落下。。。。
@gedongdong2010 那你现在用的什么方法不容易落下?
@leo 起码放在git仓库里的会跟着代码走,但是这个配置如果crontab -e看不到很可能会落下
@gedongdong2010 大哥,我是让你在这里配置
artisan schedule:run
,不是单独配置每个定时任务啊artisan schedule:run写在crontab -e -u www里吗?
@leo
@gedongdong2010 对啊
@leo 我的意思是crontab -e -u www和crontab -e编辑不是crontab文件,后者看不到前者编辑的内容,一般情况下我可能不知道crontab -e -u www里还有东西,甚至不会去看,所以容易落下
@gedongdong2010 那说明你们的权责不明确,这个事情要么运维全权负责,和开发没有关系,要么开发自己管但需要在内部通气。如果都做不到那就怎么爽怎么来吧,等到多踩几次坑就会记住了。
@leo 哈哈666,我们运维就是吃xx的,啥用也没有
不想使用单独的用户配置 crontab,也可以这么干,比如:配置在 root 账号下
php cli 或者 fpm都是用www用户去执行 就不会出现你这个问题的
日志的配置里面,写名文件权限 0646 或者0777 就可以了
composer yarn artisan 全部都用 www 用户执行
@leo 用了supervisor 队列,root用户时执行正常,但写入日志是root权限的,改为www用户时,队列就不运行了,是不是www用户必须给予登录系统的权限才行?
@haibin_hu 那你得看看 supervisor 输出什么
给 artisan 命令设置一个 alias ,su www 不就没那么多问题了
@leo
访问包含这段代码的控制器
报错啊,laravel 8