How do i know if a php script is running?

I have a PHP script that listens on a queue. Theoretically, it's never supposed to die. Is there something to check if it's still running? Something like Ruby's God [ //god.rubyforge.org/ ] for PHP?

God is language agnostic but it would be nice to have a solution that works on windows as well.

asked Sep 22, 2008 at 20:03

I had the same issue - wanting to check if a script is running. So I came up with this and I run it as a cron job. It grabs the running processes as an array and cycles though each line and checks for the file name. Seems to work fine. Replace #user# with your script user.

exec["ps -U #user# -u #user# u", $output, $result];
foreach [$output AS $line] if[strpos[$line, "test.php"]] echo "found";

answered Dec 11, 2011 at 17:07

JayJay

1211 silver badge2 bronze badges

In linux run ps as follows:

ps -C php -f

You could then do in a php script:

$output = shell_exec['ps -C php -f'];
if [strpos[$output, "php my_script.php"]===false] { 
  shell_exec['php my_script.php  > /dev/null 2>&1 &'];
}

The above code lists all php processes running in full, then checks to see if "my_script.php" is in the list of running processes, if not it runs the process and does not wait for the process to terminate to carry on doing what it was doing.

answered Sep 9, 2015 at 11:25

1

Just append a second command after the script. When/if it stops, the second command is invoked. Eg.:

php daemon.php 2>&1 | mail -s "Daemon stopped" 

Edit:

Technically, this invokes the mailer right away, but only completes the command when the php script ends. Doing this captures the output of the php-script and includes in the mail body, which can be useful for debugging what caused the script to halt.

answered Sep 23, 2008 at 15:25

troelskntroelskn

112k24 gold badges132 silver badges154 bronze badges

1

Simple bash script

#!/bin/bash
while [true]; do
    if ! pidof -x script.php;
    then
        php script.php &
    fi
done

answered Sep 22, 2008 at 20:11

MezMez

23.9k14 gold badges70 silver badges92 bronze badges

3

Not for windows, but...

I've got a couple of long-running PHP scripts, that have a shell script wrapping it. You can optionally return a value from the script that will be checked in the shell-script to exit, restart immediately, or sleep for a few seconds -and then restart.

Here's a simple one that just keeps running the PHP script till it's manually stopped.

#!/bin/bash
clear
date
php -f cli-SCRIPT.php
echo "wait a little while ..."; sleep 10
exec $0

The "exec $0" restarts the script, without creating a sub-process that will have to unravel later [and take up resources in the meantime]. This bash script wraps a mail-sender, so it's not a problem if it exits and pauses for a moment.

answered Sep 23, 2008 at 12:13

Alister BulmanAlister Bulman

33.6k9 gold badges70 silver badges109 bronze badges

1

Here is what I did to combat a similar issue. This helps in the event anyone else has a parameterized php script that you want cron to execute frequently, but only want one execution to run at any time. Add this to the top of your php script, or create a common method.

$runningScripts = shell_exec['ps -ef |grep '.strtolower[$parameter].' |grep '.dirname[__FILE__].' |grep '.basename[__FILE__].' |grep -v grep |wc -l'];
if[$runningScripts > 1]{
    die[];
}

answered Dec 30, 2019 at 4:29

Dom DaFonteDom DaFonte

1,56413 silver badges28 bronze badges

You can write in your crontab something like this:

0 3 * * * /usr/bin/php -f /home/test/test.php my_special_cron

Your test.php file should look like this:

Chủ Đề