cron command to run every 12 hours
UnixCronUnix Problem Overview
I need unix cron command to run every 12 hours.
I have 500+ sub blogs in my server.
This is the file i want to run every 12 hours
http://*.mysite.com/somedir/index.php
Where * is my subdomain of my blogs.
I need cron command for all blogs. Is it possible to run all of them with single command? OR do i have to create command for each blog?
Unix Solutions
Solution 1 - Unix
A crontab file has five fields for specifying day , date and time followed by the command to be run at that interval.
* * * * * command to be executed
- - - - -
| | | | |
| | | | +----- day of week (0 - 6) (Sunday=0)
| | | +------- month (1 - 12)
| | +--------- day of month (1 - 31)
| +----------- hour (0 - 23)
+------------- min (0 - 59)
*
in the value field above means all legal values as in braces for that column.
You could use 0 1,13 * * *
which means for every 1AM and 1PM.
0 1,13 * * * rm /var/www/*/somedir/index.php > /home/someuser/cronlogs/some.log 2>&1
where *
can be replaced by different domain names.
Solution 2 - Unix
I think the right way is -> 1 */12 * * *
(actually, any number in the minute position will do the trick.)
If you set -> * */12 * * *
it will be executed every minute at 12h and again at 24h.
Solution 3 - Unix
Assuming your sites live in /var/www/sitename and you have the php shell installed in /usr/bin/php you can easily create a cron job that runs all those files.
run
> crontab -e
and add this line
42 */12 * * * /usr/bin/php /var/www/*/somedir/index.php >> ~/cronjob.log 2>&1
The * here in /var/www/*/somedir is just a wildcart. This means it will catch every directory in your /var/ww folder.
f.ex:
[jens@localhost ~]$ ls -l temp
total 28
-rw-rw-r--. 1 jens jens 1641 Feb 21 16:12 somefile.py
drwxrwxr-x. 2 jens jens 4096 Feb 22 15:10 test
drwxrwxr-x. 2 jens jens 4096 Feb 22 15:10 test2
drwxrwxr-x. 2 jens jens 4096 Feb 22 15:10 test3
drwxr-xr-x. 8 jens jens 4096 Jan 27 10:21 emptydir
-rw-rw-r--. 1 jens jens 548 Jan 27 16:15 Unsaved Document 1
[jens@localhost ~]$ ls temp/*/testfile.php
temp/test2/testfile.php temp/test3/testfile.php temp/test/testfile.php
As you can see, this returns the testfile.php in each subfolder of temp, namely folder test, test2 and test3. Emptydir is also a folder, but since it has no testfile.php in it, nothing willhappen with it.
If your directory structure is arbitrarily deep you can use **
e.g.
42 */12 * * * /usr/bin/php /var/www/**/index.php >> ~/cronjob.log 2>&1
Solution 4 - Unix
Use "*/12" to mean "every 12 hours."
Solution 5 - Unix
You need some kind of master-script (called by cron), which expands the list of sites, and calls "/usr/bin/php /var/www/*/somedir/index.php", whith the '*' replaced by a list entry. This can be done in a shellscript, a perl or python script, or maybe even a php script. For sh this could be: (untested)
#!/bin/sh
cd /home/subdir/for/cron
LIST="a b c d e f g h i j k l m o p q r s t u v w x y z"
for x in $LIST; do
/usr/bin/php /var/www/${x}/somedir/index.php 2>$1 > /tmp/${x}.log
done
If it is inconvenient to have the list hardcoded like this, there are other methods:
backticks
, or read < file_with_all_the_names_in_it
Solution 6 - Unix
0 */12 * * *
means "At minute 0 past every 12th hour."
Check out https://crontab.guru for a nice calculator.
Solution 7 - Unix
Write command in console > crontab -e
edit with editor (I like nano)
add line
> 0 1,13 * * * php /home/catalog/public_html/crons/index.php
close with
> press ctrl + x
press y then press enter done :)
Check if saved with
> crontab -l
command
if you want to test if it will work test just running it manualy with
> php /home/catalog/public_html/crons/index.php
command
Solution 8 - Unix
Use this it will Run after each 12 hour
- */12 * * * php /var/www/"Your domain"/cronfile.php
Solution 9 - Unix
->cron('0 */12 * * *');
This cron will run the scheduler at every 12 hours.