使用PHP脚本设置Cron作业


Setting up Cron job using PHP script

我是编程初学者,我曾尝试用两种方式使用PHP脚本设置Cron Job,这是我在互联网上找到的,但我总是遇到一些自己无法修复的错误:第一种方法:

 exec('echo -e "`crontab -l`* * {$_POST['birthDay']} {$_POST['birthMonth']} * /home/jharvard/vhosts/pset7/public/{$_POST['lastname']}{$_POST['firstname']}.php" | crontab -");

,但我认为出现错误是因为"符号,我相信很多"符号也不好。

第二种方法:

 echo "* * {$_POST['birthDay']} {$_POST['birthMonth']} * /home/jharvard/vhosts/pset7/public/{$_POST['lastname']}{$_POST['firstname']}.php" | tee -a /var/spool/cron/root

错误为:(!)分析错误:语法错误,第24行/home/jharvard/vhosts/pset7/public/calendar.php中出现意外的"var"(T_var)

第三次尝试:

 $cron_file = "{$_POST['lastname']}{$_POST['firstname']}";
// Create the file
touch($cron_file); 
// Make it writable
chmod($cron_file, 0777); 
// Save the cron
  file_put_contents($cron_file, "* * {$_POST['birthDay']} {$_POST['birthMonth']} * /home/jharvard/vhosts/pset7/public/{$_POST['lastname']}{$_POST['firstname']}.php"); 
 //Install the cron
exec('crontab cron_file');

我不知道为什么这个不起作用。我执行

crontab-l

,但它没有显示任何新作业

您的第一次尝试遇到了很多问题:

  • 字符串以单引号开始,以双引号结束
  • 将解析以双引号开头的字符串中的变量。所以,如果您的字符串以单引号开头,变量将不会替换为它们的值
  • 在以单引号开头的字符串中不能使用单引号字符,除非使用反斜杠转义。(同样适用于双引号)示例:$var = '''test'''

所以从语法上讲,你的第一次尝试应该是这样的:

exec("echo -e '"`crontab -l`* * {$post['birthDay']} {$post['birthMonth']} * /home/jharvard/vhosts/pset7/public/{$post['lastname']}{$post['firstname']}.php'" | crontab -");

更好的解决方案

正如我从您的代码中了解到的,您希望在用户生日那天做一些事情。一个更好的解决方案是手动创建一个单独的cronjob,它将每晚运行一个文件,该文件将管理要做的事情(包括谁的生日,向他们发送电子邮件等),而不是为每个用户创建一个cronjob。

你可以这样做

$command = " * * * * * php PATH_TO_YOUR/some.php ";
exec('echo -e "`crontab -l`'n'.$command.'" | crontab -', $result);
var_dump($result);

通过此操作,您可以向www-data的用户crontab添加新命令,该命令将每分钟运行some.php

有关更多信息,请参阅关于crontab的参考资料-http://www.adminschoice.com/crontab-quick-reference,您需要阅读它来了解如何处理* * * * *(负责cronjob运行时间),以及如何使用phpsh和其他脚本

构建正确的$command