24

I need to set up a cron job in cpanel that calls a URL (on the same server) once a week. I was going to use wget but it turns out this is disabled on the shared server being used.

Is there an alternative to wget? I've heard that curl can be used but I don't know how to set that up in a cron command.

Also, what's the command to make the cronjob do nothing on completion?

Any ideas greatly appreciated!

4
  • 1
    What would the wget do if you could use it ? Commented Aug 9, 2011 at 16:32
  • Why would they allow curl in case they have disabled wget? Commented Aug 9, 2011 at 16:36
  • @Iain - it's needed to process a PHP script Commented Aug 9, 2011 at 16:38
  • @Andol - very good question. that's just how it is Commented Aug 9, 2011 at 16:38

3 Answers 3

30

instead of using wget, curl works like this:

curl --silent http://domain.com/cron.php 

which will work in the same way as wget. if its a php file you are launching, is there any reason you cant run it via the command line php interpreter like so:

php -q /path/to/cron.php 

same on a webserver request and often will work much faster and without certain timeout restrictions present when called via webserver/curl

6
  • Calling curl that way will print the result to stdout. If you want to behave equivalent to wget, and save the output to a file name based on the url, you also want to add the --remote-name flag. Commented Aug 9, 2011 at 16:34
  • does the --silent mean that there's no response or output? Commented Aug 9, 2011 at 16:39
  • 1
    Also, calling the php script from the command line might not necessarily yield the same result. In addition to the possibility of different configuration there is also the not uncommon scenario of the script being run as a different user that way. It alls depends on the setup. Commented Aug 9, 2011 at 16:43
  • Well, I got it to work using "curl --silent domain.com/script.php >/dev/null 2>&1" but it also works fine with "curl -o --url domain.com/script.php >/dev/null 2>&1" what's the difference? Commented Aug 9, 2011 at 17:14
  • 1
    The first command sends all output to /dev/null, the second will create a file called -url in the home directory of the user running the script, which contains the output of your php file, all other output goes to /dev/null. Commented Aug 10, 2011 at 7:21
14

If curl is available you could try something like

1 1 * * 0 /usr/bin/curl --silent http://example.come/some.php &>/dev/null 

That should cause curl to be completely silent so you don't get any email from it on completion.

1
  • 4
    I would recommend using the option --show-error too, so it is silent for normal operation but will yield an error if it happens. Commented Mar 12, 2015 at 19:45
10

I'd suggest to add "-m" parameter in addition to --silent as this parameter sets the maximum time allowed for the transfer. Imagine you call the cron every minute and the script takes 2mins - this can have bad impact on the server load or other things.

1 1 * * 0 /usr/bin/curl -m 120 -s http://example.come/some.php &>/dev/null 

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.