
Crontab (Linux/CentOS 7) – More frequent than 1 minute
Setting up crontab
Open and edit crontab file
# crontab -eAdd this line (Change the path to your own)
*/1 * * * * sh /usr/bin/cronscript.sh >> /var/www/mywebpage/cron_log.logThis will open the cronscript.sh every minute.
Create a new shell-script file
#vi /usr/bin/cronscript.shThe .sh script will open the cron.php every 15 secounds.
#!/bin/sh
/usr/bin/php -f /var/www/mywebpage/cron.php
sleep 15s
/usr/bin/php -f /var/www/mywebpage/cron.php
sleep 15s
/usr/bin/php -f /var/www/mywebpage/cron.php
sleep 15sPHP cronjob manager
THIS IS NOT NEEDED TO USE CRONTAB – It’s just my own little crontab manager in PHP!
I like to add, edit and test cronjobs in my browser – and log when they was last runned. This is because I have some sync files, that could be called manually, like user-sync with AD LDAP. If new users are missing, I can at least check when the last sync was called. I can also run it manually from GUI.
SQL script
--
-- Tabellstruktur for tabell `system_cronjobs`
--
CREATE TABLE IF NOT EXISTS `system_cronjobs` (
`cron_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`title` varchar(128) NOT NULL,
`filepath` varchar(256) NOT NULL,
`interval` int(11) NOT NULL COMMENT 'interval in sec',
`run_on_day` tinyint(4) NOT NULL COMMENT 'Day (1-7) 1=monday, 7=sunday',
`run_on_time` int(4) unsigned zerofill NOT NULL COMMENT 'Time in day (ex 1600)',
`last_run` int(11) NOT NULL,
`disabled` tinyint(4) NOT NULL
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=latin1;
--
-- Dataark for tabell `system_cronjobs`
--
INSERT INTO `system_cronjobs` (`cron_id`, `user_id`, `title`, `filepath`, `interval`, `run_on_day`, `run_on_time`, `last_run`, `disabled`) VALUES
(1, 1, 'SMS: Check for new SMS', '/var/www/mywebpage/admin/modules/sms/cron/check_for_sms.php', 15, 0, 0000, 1421756852, 0);cron.php
This script was written in just a few minutes and should NOT be used in a production enviroment without the knowledge to qualify it your self!
<?php
require_once('db-connect.inc.php');
$debug = false;
if ($debug) {
echo "Date: " . date('d-m-Y') . "<br />";
echo "Time: " . date('Hi') . "<br />";
echo "<hr />";
}
$queryCronJobs = "SELECT * FROM system_cronjobs WHERE disabled='0'";
$resultCronJobs = $mysqli->query($queryCronJobs);
while ($rowCronJobs = $resultCronJobs->fetch_array()) {
$runThis = false;
$runThisDay = false;
$runThisTime = false;
if ($debug) echo "Running: {$rowCronJobs['title']}<br />";
// Check timeinterval
$timeDiff = (time() - $rowCronJobs['last_run']);
if ($rowCronJobs['interval'] > 0) {
if ($timeDiff > $rowCronJobs['interval']) {
$runThis = true;
if ($debug) echo "Run on this interval<br />";
}
}
// Check day/time
elseif (!empty($rowCronJobs['run_on_day']) || !empty($rowCronJobs['run_on_time'])) {
if ($debug) echo "Run on day/time. Day:{$rowCronJobs['run_on_day']}, Time:{$rowCronJobs['run_on_time']}<br />";
// If day matches
if ($rowCronJobs['run_on_day'] > 0 && $rowCronJobs['run_on_day'] == date('N')) {
$runThisDay = true;
if ($debug) echo "Run on this day<br />";
}
// If time matches
if ($rowCronJobs['run_on_time'] > 0 && $rowCronJobs['run_on_time'] == date('Hi')) {
$runThisTime = true;
if ($debug) echo "Run on this time<br />";
}
// Both day and time
if ($rowCronJobs['run_on_day'] > 0 && $rowCronJobs['run_on_time'] > 0) {
if ($runThisDay == true && $runThisTime == true) $runThis = true;
if ($runThis == true && $timeDiff < (86400 + 100)) $runThis = false; // Check min interval to prevent spamming
}
// Only day
elseif ($rowCronJobs['run_on_day'] > 0 && $rowCronJobs['run_on_time'] == 0) {
if ($runThisDay == true && $runThisTime == false) $runThis = true;
if ($runThis == true && $timeDiff < (86400 + 100)) $runThis = false; // Check min interval to prevent spamming
}
// Only time
elseif ($rowCronJobs['run_on_day'] == 0 && $rowCronJobs['run_on_time'] > 0) {
if ($runThisDay == false && $runThisTime == true) $runThis = true;
if ($runThis == true && $timeDiff < (120)) $runThis = false; // Check min interval to prevent spamming
}
}
// Run cronjobs
if ($runThis == true) {
if ($debug) echo "Run this == TRUE<br />";
// Update last run timestamp
$queryUpdateCronJobs = "UPDATE system_cronjobs SET
last_run='". time() ."'
WHERE cron_id='".$rowCronJobs['cron_id']."'";
$resultUpdateCronJobs = $mysqli->query($queryUpdateCronJobs);
//include(ABSPATH . $rowCronJobs['filepath']);
include($rowCronJobs['filepath']);
if ($debug) echo "result2: $resultUpdateCronJobs <br />";
if ($debug) echo "query2: $queryUpdateCronJobs <br />";
}
else {
if ($debug) echo "Run this == FALSE<br />";
}
if ($debug) echo "<hr />";
}
?>
Kommentarer
Laster kommentarer …