This is the first time I run a cron job. I'm doing it in a virtual machine with Amazon, Ubuntu 14.04.2 LTS.
This is the file of my crontab -e
:
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
*/1 * * * * root /usr/bin/php /var/www/html/testimages/script.php
Well, this is what I've tried so far, I'm making a list so whoever could have a problem with cron jobs, could check what to do before:
- Modifying either
ubuntu
user's crontab androot
user's crontab. - Leave a blank line at the end
* * * * * root /usr/bin/php /var/www/html/testimages/script.php
* * * * * ubuntu /usr/bin/php /var/www/html/testimages/script.php
* * * * * /usr/bin/php /var/www/html/testimages/script.php
* * * * * php /var/www/html/testimages/script.php
* * * * * "php /var/www/html/testimages/script.php"
- All this, but replacing the first
*
by*/1
- Setting permission to
755
toscript.php
- Restarting cron
- Adding a header line on
script.php
of this:#!/usr/local/bin/php -q
When I type grep CRON /var/log/syslog
I can see:
Oct 27 15:32:01 ip-172-31-1-104 CRON[1184]: (root) CMD (root /usr/bin/php /var/www/html/testimages/script.php)
Oct 27 15:33:01 ip-172-31-1-104 CRON[1520]: (root) CMD (root /usr/bin/php /var/www/html/testimages/script.php)
Oct 27 15:34:01 ip-172-31-1-104 CRON[1849]: (root) CMD (root /usr/bin/php /var/www/html/testimages/script.php)
Oct 27 15:35:01 ip-172-31-1-104 CRON[2188]: (root) CMD (root /usr/bin/php /var/www/html/testimages/script.php)
Oct 27 15:36:01 ip-172-31-1-104 CRON[2513]: (root) CMD (root /usr/bin/php /var/www/html/testimages/script.php)
Oct 27 15:37:01 ip-172-31-1-104 CRON[2840]: (root) CMD (root /usr/bin/php /var/www/html/testimages/script.php)
Oct 27 15:38:01 ip-172-31-1-104 CRON[3165]: (root) CMD (root /usr/bin/php /var/www/html/testimages/script.php)
Oct 27 15:39:01 ip-172-31-1-104 CRON[3494]: (root) CMD (root /usr/bin/php /var/www/html/testimages/script.php)
the script basically executes the code and sends an email, which does perfectly when I type php /var/www/html/testimages/script.php
on the command line, but I'm not getting that mail when set in cron.
What am I doing wrong?
Thank you very much.
Regards.
Rafael.
EDIT:
this is the php file I'm trying to run
#!/usr/local/bin/php -q
<?php
echo '<script>!function(e){function t(e,t){var n=new Image,r=e.getAttribute("data-src");n.onload=function(){e.parent?e.parent.replaceChild(n,e):e.src=r,t?t():null},n.src=r}function n(t){var n=t.getBoundingClientRect();return n.top>=0&&n.left>=0&&n.top<=(e.innerHeight||document.documentElement.clientHeight)}for(var r=function(e,t){if(document.querySelectorAll)t=document.querySelectorAll(e);else{var n=document,r=n.styleSheets[0]||n.createStyleSheet();r.addRule(e,"f:b");for(var l=n.all,c=0,o=[],i=l.length;i>c;c++)l[c].currentStyle.f&&o.push(l[c]);r.removeRule(0),t=o}return t},l=function(t,n){e.addEventListener?this.addEventListener(t,n,!1):e.attachEvent?this.attachEvent("on"+t,n):this["on"+t]=n},c=new Array,o=r("img.lazy"),i=function(){for(var e=0;e<c.length;e++)n(c[e])&&t(c[e],function(){c.splice(e,e)})},u=0;u<o.length;u++)c.push(o[u]);i(),l("scroll",i)}(this);</script>'
echo '<style>table, th, td {border: 1px solid black; border-collapse: collapse;}th, td {padding: 15px;}th { text-align: left; background-color: #666666;}</style>';
require '/var/www/html/libraries/mail/PHPMailerAutoload.php';
require '/var/www/html/libraries/myLibrary/core.php';
$mail = new PHPMailer;
$to = "example@gmail.com";
ob_start();
function echoText($text) {
echo $text;
}
$show_json = $_GET['show_json'];
echoContent(); // belongs to the core
// send email
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = 'smtp.gmail.com'; // Specify main and backup SMTP servers
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = 'example@gmail.com'; // SMTP username
$mail->Password = 'secret'; // SMTP password
$mail->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted
$mail->Port = 587; // TCP port to connect to
$mail->setFrom('example@gmail.com', 'Watchdog - Rafael');
// $mail->addAddress('joe@example.net', 'Joe User'); // Add a recipient
$mail->addAddress($to);
// $mail->addReplyTo('info@example.com', 'Information');
// $mail->addBCC('bcc@example.com');
// $mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments
// $mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = 'Test on database';
$contents = ob_get_contents();
$mail->Body = $contents;
// $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo 'Message has been sent';
}
print_r(error_get_last());
}
?>
EDIT:
I'm trying to set a bash script to run it, and export even the results to a log.txt... that log.txt
is empty.