I have some cronjobs written on several servers using CentOS7 in combination with Plesk 18.
When I check my cron log I see that the cronjobs are started.
Even when I manually start the scripts I want to use they work, but for some reason when the crontab does it, nothing is happening.
For instance some of the cronjobs I have are:
MAILTO=support#shoptrader.nl
0 0 * * * sh /var/www/vhosts/upgrade14.shoptrader.com/httpdocs/remove_files.sh
0 6 * * * sh /var/www/vhosts/upgrade14.shoptrader.com/httpdocs/security_htaccess/security_htaccess.sh
15 7 * * * sh /var/www/vhosts/upgrade14.shoptrader.com/httpdocs/backup_personal_files.sh
30 9 * * * sh /var/www/vhosts/upgrade14.shoptrader.com/httpdocs/find_hacks/find_hacks.sh
*/5 * * * * sh /var/www/vhosts/upgrade14.shoptrader.com/httpdocs/find_sql_injection/find_sql_injection.sh
15 0 * * * sh /var/www/vhosts/upgrade14.shoptrader.com/httpdocs/backup_templates_data/backup_templates_data.sh
If I check my log I see something like: Jan 14 09:30:01 web14 CROND[4402]: (root) CMD (sh /var/www/vhosts/upgrade14.shoptrader.com/httpdocs/find_sql_injection/find_sql_injection.sh)
I've notified myself with e-mails and get this response
/var/www/vhosts/upgrade14.shoptrader.com/httpdocs/find_sql_injection/find_sql_injection.sh: line 12: php: command not found.
Which doesn't make sense, because PHP is working on the server.
I created a cronjob with the command crontab -e:
* * * * * (filename).sh
This file test.sh should be executed every minute. But it doesn't work.
I know that it is not the script because i did run bash (name of the file) it works so the crontad is the issue.
every minute:
* * * * * sciptname.sh
every 24hours (every midnight):
0 0 * * * sciptname.sh
I have to run task which take time 3 or 5 minut
How to run multiple task in crontab -in same time ?
crontab -e
0 13 * * * /etc/rip_first_radio.sh
0 13 * * * /etc/rip_second_radio.sh
0 13 * * * /etc/rip_third_radio.sh
0 13 * * * /etc/rip_fourth_radio.sh
your crontab config is correct. But you can add add all into one script and run also.
vi main.sh
./etc/rip_first_radio.sh &
./etc/rip_second_radio.sh &
./etc/rip_third_radio.sh &
./etc/rip_fourth_radio.sh &
and add main.sh to cron.
0 13 * * * ./main.sh
I have a crontab:
1 0 * * * /opt/scripts/pg_backup mydb
I expected it run at 00:01
But it always run at 12h (12/24), not 0h every day.
How can I fix it?
I'm not great with Linux, my apologies if this is easy.
I need to run 7 different scripts via cron at 15 minute intervals. I have worked out that each script needs to run every 105 minutes (every 1 hour & 45 minutes) as follows :
Script 1 Script 2 Script 3 Script 4 Script 5 Script 6 Script 7
00:15 00:30 00:45 01:00 01:15 01:30 01:45
02:00 02:15 02:30 02:45 03:00 03:15 03:30
etc...
Now I know I can't just put this:
*/105 * * * * something
Because the minutes will only go up to 59.
Other than writing each one in a line separately, is there an easy way to do this?
Any assistance would be greatly appreciated.
No, cron can't do that directly.
What you can do is have a cron job that runs every 15 minutes, invoking a wrapper script. The wrapper script can query the current time and decide which of your 7 scripts to execute.
Doing the math is left as an exercise. Don't assume that your wrapper will start exactly at the top of the minute; there can be some delay between the time a cron job is scheduled to execute and the time it actually runs, depending on system load.
at is a good candidate for this problem.
Write a wrapper (or build into your script):
#!/bin/bash
at -f $0 now + 105 minutes
<program>
Then use at -f <script> <time> for each instance.
Or generate the crontab entries using a script (my first draft was a bit too long to be a oneliner):
#!/usr/bin/perl -Ws
use strict;
use DateTime;
our ($period, $offset, $command);
my ($offh, $offm) = split(/:/, $offset || '0:00');
my %crontab = ();
for (my $i = 0; $i < 1440; $i += $period) {
my ($h,$m) = split /:/, 'DateTime'->today->set('hour', $offh, 'minute', $offm)->add('minutes', $i)->hms;
$crontab{$m}{$h}++;
}
printf("%02d %-15s * * *\t%s\n", $_, join(',', sort keys %{$crontab{$_}}), $command) for sort keys %crontab;
Usage:
$ ./gencrontab -period=105 -offset=1:30 -command=myprogram
00 05,12,19 * * * myprogram
15 00,03,10,17 * * * myprogram
30 01,08,15,22 * * * myprogram
45 06,13,20 * * * myprogram