You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Background jobs no longer inherit the php-fpm worker's low-numbered descriptors (Trello py2Gb7O7). A worker holds dup()s of the master's stdout/stderr catch-pipes on fds 3-9 (rollun-logger's php://stdout writer; fd 6/7/8 in production), and Interrupter\Process / ProcessByName spawned jobs with shell_exec("php … 1>X 2>X & echo $!"), which redirects only 1 and 2. A job that kept such a dup alive past the worker's exit made the master read EAGAIN instead of EOF; the freed child's event stayed in the master's queue and the replacement worker's pipe was never registered in epoll, so it wedged forever in pipe_write after 64 KB of output (php-src GH-8517; on PHP >= 8.1.20 the symptom is lost logs instead). The spawn command now appends 3>&- 4>&- 5>&- 6>&- 7>&- 8>&- 9>&-.
Limits: /bin/sh is dash on our images and only parses single-digit redirections, so descriptors >= 10 are still inherited; the listening socket and the FastCGI connection are usually there. This is the limited change agreed for the services that stay on their current PHP for now; the complete fix (proc_open with a full descriptorspec) is tracked in the same ticket. Pair it with rollun-logger >= 6.2.9 / 7.8.2 / 8.0.2, which stops the writer from holding the dup in the first place.
No change for PidKiller/WorkerManager: $! is still the job's own PID and the job's argv is unchanged. Verified with dash on PHP 7.2 and 8.0: closing a descriptor that is not open is not an error, OUTPUT_STREAM file paths and /dev/null behave as before, and the test suites give the same results as the previous release.