我是编程初学者,我曾尝试用两种方式使用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运行时间),以及如何使用php
、sh
和其他脚本
$command