我在向我的应用程序API发出请求时收到间歇性的500:
“无法创建可锁定文件:/home/site/wwwroot/storage/framework/cache/data/d1/38/d138002af2c582ff05ad3ca47d0e367ed67f8162.请确保您有权在此位置创建文件。”
查看堆栈跟踪,问题似乎源于“ThrottleRequests”中间件。
我怀疑有一个进程改变了文件的权限,阻止了'ThrottleRequests'类写入该高速缓存。
1.)我验证了用户在未发生错误时执行写入操作:
sh getfileusers.sh /home/site/wwwroot/storage/framework/cache/data/d1/38/d138002af2c582ff05ad3ca47d0e367ed67f8162
getfileusers.sh内容:
#!/bin/sh
FILE=$1
while true; do
lsof "${FILE}"
done > /home/fileusers.log
fileusers.log内容:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
php-fpm 14667 www-data 7r REG 0,104 14 13450135 /home/site/wwwroot/storage/framework/cache/data/d1/38/d138002af2c582ff05ad3ca47d0e367ed67f8162
2.)由于“www-data”可以写入而不会出错,因此我更新了部署脚本,以确保执行artisan命令的其他进程正在使用www-data用户。部署脚本中的相关行:
配置调度程序
(crontab -l 2>/dev/null; echo "* * * * * su www-data -c '/usr/local/bin/php /home/site/wwwroot/artisan schedule:run >> /home/cronresult.txt 2>&1' -s /bin/sh www-data")|crontab
配置主管服务器
echo "[program:laravel-worker]
process_name=%(program_name)s
command=/usr/local/bin/php /home/site/wwwroot/artisan queue:work --sleep=3 --tries=3 --max-time=3600
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=www-data
redirect_stderr=true
stdout_logfile=/home/site/wwwroot/storage/logs/laravel-worker.log
stopwaitsecs=3600" >> /etc/supervisor/conf.d/laravel-worker.conf
3.)部署脚本中的其他相关行:
php artisan cache:clear
sudo chgrp -R www-data storage bootstrap/cache
sudo chmod -R ug+rwx storage bootstrap/cache
有人有什么见解吗?先谢谢你了。
1条答案
按热度按时间qfe3c7zg1#
确保cron / supervisor像www-data用户那样处理创建的文件。
在部署代码后,我仍然看到这个问题。只需更改部署脚本中的操作顺序即可解决该问题。
这是我的最终部署脚本。希望对某人有帮助: