'Supervisord "exit status 1 not expected" running php script
I'm having issue try to configure supervisor to run a php script. Running supervisor in debug mode gives me this:
2015-03-09 08:53:06,342 INFO supervisord started with pid 2030
2015-03-09 08:53:06,358 INFO spawned: 'worker1' with pid 2031
2015-03-09 08:53:06,423 INFO exited: worker1 (exit status 1; not expected)
2015-03-09 08:53:06,424 INFO received SIGCLD indicating a child quit
2015-03-09 08:53:07,440 INFO spawned: 'worker1' with pid 2032
2015-03-09 08:53:07,587 INFO exited: worker1 (exit status 1; not expected)
2015-03-09 08:53:07,589 INFO received SIGCLD indicating a child quit
2015-03-09 08:53:09,604 INFO spawned: 'worker1' with pid 2033
2015-03-09 08:53:09,756 INFO exited: worker1 (exit status 1; not expected)
2015-03-09 08:53:09,758 INFO received SIGCLD indicating a child quit
2015-03-09 08:53:12,775 INFO spawned: 'worker1' with pid 2034
2015-03-09 08:53:12,973 INFO exited: worker1 (exit status 1; not expected)
2015-03-09 08:53:12,974 INFO received SIGCLD indicating a child quit
2015-03-09 08:53:13,976 INFO gave up: worker1 entered FATAL state, too many start retries too quickly
The supervisord configuration:
[program:worker1]
command=php myScript.php
directory=/home/path/to/script/
user=root
autostart=true
autorestart=true
stderr_logfile=/var/log/worker1.err.log
stdout_logfile=/var/log/worker1.out.log
redirect_stderr=true
environment=PATH="/usr/bin"
For this test myScript.php just print out echo "test".PHP_EOL;
There are no logs reporting errors from php, and if I run the script thru cli it works as expected. The supervisord log just report the same output as debuggin.
I've also tried using absolute paths like /usr/bin/php /home/path/to/script/myScript.php but nothing changes.
File permission for myScript.php are set to -rwxrwxr-x 1 root apache
Really don't know what else i could check. Thanks for support!
UPDATE_1
I've also tried to monitor other program like /bin/cat or a bash script and works like a charm. The problem seems to be limited to php.
UPDATE_2
As N.B. pointed out in the comments i've changed the test script to look more like long-running-job:
while(true){
echo "test".PHP_EOL;
sleep(10);
}
Same as before, it enters in FATAL state.
Solution 1:[1]
Try to set startsecs = 0:
[program:foo]
command = ls
startsecs = 0
autorestart = false
http://supervisord.org/configuration.html
startsecs
The total number of seconds which the program needs to stay running after a startup to consider the start successful. If the program does not stay up for this many seconds after it has started, even if it exits with an “expected” exit code (see exitcodes), the startup will be considered a failure. Set to 0 to indicate that the program needn’t stay running for any particular amount of time.
Solution 2:[2]
I've been using Supervisord for a while and this is what I have in my config:
[program:worker1]
command=php /absolute/path/to/myScript.php
Reason I'm writing this as an anwser is due to formatting.
Also, try this script:
for(i = 0; i < 10; i++)
{
printf("\nIteration: %d", $i);
usleep(1000 * 200); // 200 milliseconds between each printf
}
exit;
And add it to supervision. It should be restarted after it does its echoing.
Solution 3:[3]
If you run supervisor command like docker -it exec ... and got exit status 1; not expected you should try to remove -it. More here https://stackoverflow.com/a/43099210/3664772
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | lloiacono |
| Solution 2 | N.B. |
| Solution 3 | sha |
