報錯日志
UnexpectedValueException: There is no existing directory at "/app/runtime/logs/admin" and it could not be created: Invalid argument in /app/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:251
Stack trace:
#0 /app/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php(141): Monolog\Handler\StreamHandler->createDir('/app/runtime/lo...')
#1 /app/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php(126): Monolog\Handler\StreamHandler->write(Array)
#2 /app/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php(48): Monolog\Handler\RotatingFileHandler->write(Array)
#3 /app/vendor/monolog/monolog/src/Monolog/Logger.php(400): Monolog\Handler\AbstractProcessingHandler->handle(Array)
#4 /app/vendor/monolog/monolog/src/Monolog/Logger.php(612): Monolog\Logger->addRecord(200, '\xE7\xAE\xA1\xE7\x90\x86\xE5\x91\x98 supAd...', Array)
#5 /app/app/admin/controller/OrdersController.php(201): Monolog\Logger->info('\xE7\xAE\xA1\xE7\x90\x86\xE5\x91\x98 supAd...', Array)
#6 /app/vendor/workerman/webman-framework/src/App.php(336): app\admin\controller\OrdersController->Notify(Object(support\Request))
#7 /app/vendor/workerman/webman-framework/src/App.php(359): Webman\App::Webman\{closure}(Object(support\Request))
#8 /app/app/admin/middleware/Auth.php(34): Webman\App::Webman\{closure}(Object(support\Request))
#9 /app/vendor/workerman/webman-framework/src/App.php(352): app\admin\middleware\Auth->process(Object(support\Request), Object(Closure))
#10 /app/vendor/webman/log/src/Middleware.php(97): Webman\App::Webman\{closure}(Object(support\Request))
#11 /app/vendor/workerman/webman-framework/src/App.php(352): Webman\Log\Middleware->process(Object(support\Request), Object(Closure))
#12 /app/vendor/workerman/webman-framework/src/App.php(663): Webman\App::Webman\{closure}(Object(support\Request))
#13 /app/vendor/workerman/webman-framework/src/App.php(158): Webman\App::findRoute(Object(Workerman\Connection\TcpConnection), '/admin/orders/N...', 'POST/admin/orde...', Object(support\Request), 200)
#14 /app/vendor/workerman/workerman/src/Connection/TcpConnection.php(753): Webman\App->onMessage(Object(Workerman\Connection\TcpConnection), Object(support\Request))
#15 /app/vendor/workerman/workerman/src/Events/Swoole.php(288): Workerman\Connection\TcpConnection->baseRead(Resource id #371)
#16 [internal function]: Workerman\Events\Swoole->Workerman\Events\{closure}()
#17 {main}
使用 Workerman\Events\Fiber::class 后目錄正常創(chuàng)建
webman/config/process.php
'eventLoop' => Workerman\Events\Swoole::class,
Workerman/5.1.1
PHP/8.3.21 (Jit off)
Linux/5.10.134-18.al8.x86_64
docker
看起來像是io_uring引起的問題,編譯的時候有開啟io_uring特性嗎?
docker 的swoole 擴展是通過https://github.com/mlocati/docker-php-extension-installer 進行安裝的.
docker 編排 使用了
security_opt:
docker exec -it webman-app php --ri swoole
swoole
Swoole => enabled
Author => Swoole Team <team@swoole.com>
Version => 6.0.2
Built => May 15 2025 22:08:22
coroutine => enabled with boost asm context
epoll => enabled
eventfd => enabled
signalfd => enabled
cpu_affinity => enabled
spinlock => enabled
rwlock => enabled
openssl => OpenSSL 3.3.3 11 Feb 2025
dtls => enabled
http2 => enabled
json => enabled
curl-native => enabled
curl-version => 8.12.1
c-ares => 1.33.1
zlib => 1.3.1
brotli => E16781312/D16781312
zstd => 1.5.6
mutex_timedlock => enabled
pthread_barrier => enabled
futex => enabled
mysqlnd => enabled
coroutine_pgsql => enabled
coroutine_sqlite => enabled
io_uring => enabled
Directive => Local Value => Master Value
swoole.enable_library => On => On
swoole.enable_fiber_mock => Off => Off
swoole.enable_preemptive_scheduler => Off => Off
swoole.display_errors => On => On
swoole.use_shortname => On => On
swoole.unixsock_buffer_size => 8388608 => 8388608
操作系統(tǒng)支持 io_uring
[root@zzz ~]# zcat /proc/config.gz | grep CONFIG_IO_URING
CONFIG_IO_URING=y
[root@zzz ~]# uname -r
5.10.134-18.al8.x86_64