112

I am just trying to run a PHP script using a cron job within CPanel - is this the correct syntax:

/usr/bin/php -q /home/username/public_html/cron/cron.php >/dev/null

I am not getting any email notifications stating a cron has been completed, do I need to do anything specific with the PHP file?

Tatu Ulmanen
  • 123,288
  • 34
  • 187
  • 185
Zabs
  • 13,852
  • 45
  • 173
  • 297
  • 25
    I think it is quite relevant seeing as many projects are hosted on Cpanel, and one would need to know how to run cron jobs if need be – William Feb 01 '16 at 09:24
  • 8
    If cPanel isn't allowed on Server Fault or Stack Overflow, where should questions about it be? – brimstone Apr 16 '16 at 20:48
  • 10
    quite ironic that this question was classed as 'off-topic' for StackOverflow but is the most active question i've ever had one here..... I hope it helped others :) – Zabs Sep 13 '16 at 11:43
  • Thanx @Tatu Ulmanen It works for me! – Tushar Rmesh Saindane Aug 22 '17 at 05:41
  • You can get email notifications by removing this part ">/dev/null". Also be sure to add the desired email address as the notification email address in cPanel cronjob section. – Dushan Apr 28 '22 at 16:17

13 Answers13

111

I used this command to activate cron job for this.

/usr/bin/php -q /home/username/public_html/yourfilename.php

on godaddy server, and its working fine.

Javascript Coder
  • 5,691
  • 8
  • 52
  • 98
Pank
  • 13,800
  • 10
  • 32
  • 45
72

In crontab system :

  • /usr/bin/php is php binary path (different in some systems ex: freebsd /usr/local/bin/php, linux: /usr/bin/php)
  • /home/username/public_html/cron/cron.php should be your php script path
  • /dev/null should be cron output , ex: /home/username/stdoutx.txt

So you can monitor your cron by viewing cron output /home/username/stdoutx.txt

tomb
  • 1,817
  • 4
  • 21
  • 40
Somy A
  • 1,682
  • 15
  • 18
  • 1
    I am using this now and it works but I do not get any email notification any ideas why not? php /home/username/public_html/cron/cron.php note I had to put the following line at the top of the PHP script #! /usr/bin/php -q – Zabs Sep 07 '11 at 12:04
  • If u want cronjob send emails for u, u must use php mail(), i dont thinks cronjob have automatic mail system, unless u using shell scripting or php. – Somy A Sep 08 '11 at 13:26
  • 1
    When I click on the "cronjobs" tab in cPanel, there are two boxes on the page - one for the command you wish to execute, and another for the e-mail address you want the output to be sent to. This is in cPanel 11. – user3640967 Oct 13 '15 at 11:36
  • 2
    What will be full command? I mean full command in one line with all options. – Auj Jul 05 '16 at 22:59
  • @SomyA please could you tell me the command for run java script file. – Narender Reddy May 23 '18 at 09:42
  • @NarenderReddy i thinks this is what you looking for [Running Command Line in Java](https://stackoverflow.com/questions/8496494/running-command-line-in-java?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa) – Somy A May 24 '18 at 22:27
  • @SomyA thanks for replay i want java script using a cron job within CPanel.THe give command for tun php file but iwant to run java script file – Narender Reddy May 25 '18 at 06:31
  • which language are cron jobs written in? also, i want to apply a cron job to a python/scrapy script that i wrote which requires 'scrapy crawl crawlername' to be executed from the CLI to run? never done this before. any help would be huge <33 – oldboy Jul 02 '18 at 00:11
  • How i can limit the size of cron job log file?or create a different log file on daily bases? – Rana Nadeem Jun 01 '20 at 06:23
  • as in unix system you can use something like `logrotate` for limiting log file size – Somy A Jun 02 '20 at 08:20
  • @RanaNadeem you can name the output file as date and it will create new file for every day like `/usr/bin/php /home/username/public_html/yourcronfile.php < /home/username/cron_output_\`date +\%d-\%m-\%Y-\%H-\%M\`.txt` – Haritsinh Gohil May 13 '21 at 12:52
28

>/dev/null stops cron from sending mails.

actually to my mind it's better to make php script itself to care about it's logging rather than just outputting something to cron

k102
  • 7,861
  • 7
  • 49
  • 69
  • may I ask how you do that? Doesn't cronTabs output to something anyway? I do `>/dev/null 2>&1` at the ending as well... – ThomasK Jun 06 '13 at 19:36
  • @ThomasK if you make a task like this `/path/to/file.php > /dev/null` it's gonna be silent. – k102 Jun 07 '13 at 05:47
21

This is the easiest way:

php -f /home/your_username/public_html/script.php

And if you want to log the script output to a file, add this to the end of the command:

>> /home/your_username/logs/someFile.txt 2>&1

Emmanuel
  • 4,933
  • 5
  • 46
  • 71
17

This is the way:

/usr/bin/php -q /home/username/public_html/yourfilename.php >/dev/null
Asi
  • 395
  • 4
  • 13
13

This cron line worked for me on hostgator VPS using cpanel.

/usr/bin/php -q /home/username/public_html/scriptname.php
Wh1T3h4Ck5
  • 8,399
  • 9
  • 59
  • 79
Mike Volmar
  • 1,927
  • 1
  • 22
  • 31
11

I've had problems using /usr/bin/php on CPanel as it is compiled as a "cgi-fcgi" binary and not "cli". Try using /usr/local/bin/php or, as it is first in the path anyway, just use 'php' instead:

php /path/to/script.php

If you want to run the script as an executable, give it +x perms and use the following as the first line of the script:

#!/usr/bin/env php
BenKennish
  • 176
  • 1
  • 4
7

I hope your problem is with path & php binary as well. If you have fixed the path as per older answers, please use php-cli instead of php command while running cron job.

It may be possible php_sapi_name() is not returning cli. Its returning something else like cgi-fcgi etc.

/usr/bin/php-cli -q /home/username/public_html/cron/cron.php >/dev/null

I hope it will help.

JH_
  • 406
  • 1
  • 4
  • 15
Lakin Mohapatra
  • 1,097
  • 11
  • 22
4

This works fine and also sends email:

/usr/bin/php /home/xxYourUserNamexx/public_html/xxYourFolderxx/xxcronfile.php

The following two commands also work fine but do not send email:

/usr/bin/php -f /home/Same As Above

php -f /home/Same As Above

Sajjad
  • 123
  • 1
  • 8
3

Suggested By Experts.

/usr/local/bin/php /home/username/public_html/path/to/cron/script
Ali Akram
  • 4,803
  • 3
  • 29
  • 38
2

It is actually very simple,

php -q /home/username/public_html/cron/cron.php
Greenonline
  • 1,330
  • 8
  • 23
  • 31
1

For domain specific Multi PHP Cron Job, do like this,

/usr/local/bin/ea-php56 /home/username/domain_path/path/to/cron/script

In the above example, replace “ea-php56” with the PHP version assigned to the domain you wish to use.

Hope this helps someone.

Anjana Silva
  • 8,353
  • 4
  • 51
  • 54
0

On a Hostgator CPANEL this worked for me:

php /home/here_your_user_name/public_html/cronJob.php
Nicoli
  • 643
  • 1
  • 7
  • 23