'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