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 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 22
leo

正确的做法应该是用 www 用户执行 artisan 命令,因为不光是日志,还有可能有缓存、 storage 等文件可能被 root 用户创建而导致 www 用户无权操作。

5年前 评论
drp3292 4年前
leo (作者) 4年前
drp3292 4年前
leo (作者) 4年前

不想使用单独的用户配置 crontab,也可以这么干,比如:配置在 root 账号下

su www -s /bin/bash -c “php artisan schedule:run”
5年前 评论
leo

正确的做法应该是用 www 用户执行 artisan 命令,因为不光是日志,还有可能有缓存、 storage 等文件可能被 root 用户创建而导致 www 用户无权操作。

5年前 评论
drp3292 4年前
leo (作者) 4年前
drp3292 4年前
leo (作者) 4年前

不想使用单独的用户配置 crontab,也可以这么干,比如:配置在 root 账号下

su www -s /bin/bash -c “php artisan schedule:run”
5年前 评论
leo

@gedongdong2010 crontab -e -u www

5年前 评论
leo

@gedongdong2010 那说明你们的权责不明确,这个事情要么运维全权负责,和开发没有关系,要么开发自己管但需要在内部通气。如果都做不到那就怎么爽怎么来吧,等到多踩几次坑就会记住了。

5年前 评论
cc1997

报错啊,laravel 8

3年前 评论

@leo

try{
    Log::notice('test');
}catch (\exception $e){
    return $e->getMessage(). '|'. $e->getFile() . '|' .$e->getLine();
}

访问包含这段代码的控制器

4年前 评论

给 artisan 命令设置一个 alias ,su www 不就没那么多问题了

4年前 评论
leo

@haibin_hu 那你得看看 supervisor 输出什么

4年前 评论
leo (作者) 4年前
haibin_hu 4年前
haibin_hu 4年前

@leo 用了supervisor 队列,root用户时执行正常,但写入日志是root权限的,改为www用户时,队列就不运行了,是不是www用户必须给予登录系统的权限才行?

4年前 评论

composer yarn artisan 全部都用 www 用户执行

4年前 评论

日志的配置里面,写名文件权限 0646 或者0777 就可以了

4年前 评论
panda-sir

php cli 或者 fpm都是用www用户去执行 就不会出现你这个问题的

5年前 评论

@leo 哈哈666,我们运维就是吃xx的,啥用也没有

5年前 评论

@leo 我的意思是crontab -e -u www和crontab -e编辑不是crontab文件,后者看不到前者编辑的内容,一般情况下我可能不知道crontab -e -u www里还有东西,甚至不会去看,所以容易落下

5年前 评论
leo
5年前 评论

artisan schedule:run写在crontab -e -u www里吗?
@leo

5年前 评论
leo

@gedongdong2010 大哥,我是让你在这里配置 artisan schedule:run,不是单独配置每个定时任务啊

5年前 评论

@leo 起码放在git仓库里的会跟着代码走,但是这个配置如果crontab -e看不到很可能会落下

5年前 评论
leo

@gedongdong2010 那你现在用的什么方法不容易落下?

5年前 评论

@leo 如果用这个方式的话可能后续有人接手很容易落下。。。。

5年前 评论

@leo 请教一下,我把脚本写在crontab中的,如果我想用www用户执行artisan命令,我应该怎么写crontab呢

5年前 评论

除了楼上所说的一系列问题,还有安全问题不容忽视,用 root 账号执行命令,脚本所拥有权限非常大,如果遭遇恶意脚本,整站就呵呵了

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!