46

I have a php script that I want to be run using a bash script, so I can use Cron to run the php script every minute or so.

As far as I'm aware I need to create the bash script to handle the php script which will then allow me to use the Cron tool/timer.

So far I was told I need to put:

#!/pathtoscript/testphp.php

at the start of my php script. Im not sure what to do from here...

Any advice? Thanks.

1
  • This answer worked for me Commented Jun 23, 2021 at 4:47

10 Answers 10

85

If you have PHP installed as a command line tool (try issuing php to the terminal and see if it works), your shebang (#!) line needs to look like this:

#!/usr/bin/php

Put that at the top of your script, make it executable (chmod +x myscript.php), and make a Cron job to execute that script (same way you'd execute a bash script).

You can also use php myscript.php.

Sign up to request clarification or add additional context in comments.

3 Comments

If you're going to use a shebang for command line usage, you REALLY should use "#!/usr/bin/env php", as it allows the script to be more portable, since PHP may not always be installed in "/usr/bin/php". Make sense?
@Rican7: ordinarily, yes, but the OP wants to run this as a cron job, which will have a reduced environment. If php isn't at /usr/bin/php, env may not be able to find it anyway. Multiple SO Q/As address this (unix.stackexchange.com/q/29608, for example).
@EML is correct here. Plus there are scenarios where using an explicit path is REALLY what you want. Sometimes an immediate loud "path not found" failure is better than weird unexpected behavior from whatever happens to be first in the user's PATH. And even when that's not the case, IMO if portability is not required/expected (probably a lot of the time), use of env - or not - is just a personal preference.
26

Sometimes PHP is placed in non standard location so it's probably better first locate it and then try to execute.

#!/usr/bin/env bash
PHP=`which php`
$PHP /path/to/php/file.php

1 Comment

/usr/bin/env php does exactly this (that's most of the point of using env), with the added advantage that you can put your php code directly in the bash script, without having to write an additional 'file.php'.
13

A previous poster said..

If you have PHP installed as a command line tool… your shebang (#!) line needs to look like this: #!/usr/bin/php

While this could be true… just because you can type in php does NOT necessarily mean that's where php is going to be... /usr/bin/php is A common location… but as with any shebang… it needs to be tailored to YOUR env.

a quick way to find out WHERE YOUR particular executable is located on your $PATH, try.. ➜which -a php ENTER, which for me looks like..

php is /usr/local/php5/bin/php
php is /usr/bin/php
php is /usr/local/bin/php
php is /Library/WebServer/CGI-Executables/php

The first one is the default i'd get if I just typed in php at a command prompt… but I can use any of them in a shebang, or directly… You can also combine the executable name with env, as is often seen, but I don't really know much about / trust that. XOXO.

Comments

9

You just need to set :

/usr/bin/php path_to_your_php_file

in your crontab.

Comments

9

I'm pretty sure something like this is what you are looking for:

#!/bin/sh

php /pathToScript/script.php

Save that with your desired script name (such as runPHP.sh) and give it execution rights, then you can use it however you want.

Edit: You might as well not use a bash script at all and just add the "php ..." command to the crontab, if I'm not mistaken.

Good luck!

1 Comment

In most environments you can't simply call php youscript.php but have to figure out the right path. E.g. using the whole path /usr/bin/php myscript.php or figuring it out dynamically by calling which php and writing the result in a variable you use later on.
5

The bash script should be something like this:

#!/bin/bash
/usr/bin/php /path/to/php/file.php

You need the php executable (usually found in /usr/bin) and the path of the php script to be ran. Now you only have to put this bash script on crontab and you're done!

Comments

2

If you don't do anything in your bash script than run the php one, you could simply run the php script from cron with a command like /usr/bin/php /path/to/your/file.php.

Comments

2

a quick way to find out WHERE YOUR particular executable is located on your $PATH, try.

Even quicker way to find out where php is ...

whereis php

I'm running debian and above command showing me

php: /usr/bin/php /usr/share/php /usr/share/man/man1/php.1.gz

Hope that helps.

4 Comments

returning output "unknown whereis"
You'll have to install whereis if its not by default.
i have installed ffmpeg on windows system, it works by command line but does not work by php while exec command is enabled. I have also restarted computer and xampp after installing ffmpeg. FYI i have setup environment variables of ffmpeg also. Kindly help, if you can. Thanks a lot :)
You should create a separate poat for that question mate.
1

Create file.php with first line in files:
file.php(#!/bin/php)
file.sh(#!/bin/bash).
Check installed php.Run command in terminal:

which php

If set there will be an answer:

/usr/bin/php

Run file.php with command:

php file.php

if the file has started then you can write this command to file.sh:

#!/bin/bash
run_php=`php file.php`
echo $run_php

Be careful ' and ` different!!!

Comments

0

I found php-cgi on my server. And its on environment path so I was able to run from anywhere. I executed succesfuly file.php in my bash script.

#!/bin/bash
php-cgi ../path/file.php

And the script returned this after php script was executed:

X-Powered-By: PHP/7.1.1 Content-type: text/html; charset=UTF-8

done!

By the way, check first if it works by checking the version issuing the command php-cgi -v

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.