Cron无法正常工作。我使用以下命令在/etc/cron.d中创建了一个文件
$ touch /etc/cron.d/php-crons
$ chown www-data /etc/cron.d/php-crons
我收到错误,如(* system * php-crons)错误的文件所有者(/etc/cron.d/php-crons) 所以我将文件所有者更改为 root
$ chown root /etc/cron.d/php-crons
即使cron不工作。 我的php文件(cron.php)如下
$fp = fopen('/etc/cron.d/php-crons', 'a');
fwrite($fp, '10 * * * * root usr/bin/php PATH TO SCRIPT/email.php'.PHP_EOL);
fclose($fp);
当我打开/etc/cron.d/php-crons时,我可以看到这份工作。
10 * * * * root usr/bin/php /var/www/PATH TO SCRIPT/email.php
在email.php中我包括
#!/usr/bin/php
mail ("examplemail@gmail.com", "Cron Successful Public HTML!", "Hello World from cron.php!");
如果我将(/etc/cron.d/php-crons)file所有者更改为 root ,然后在浏览器中运行 cron.php ,那么我无法在/etc/cron.d/php-crons中写任何内容并得到如下警告。
警告:fopen(/etc/cron.d/php-crons):无法打开流:第2行/var/www/cron.php中的权限被拒绝警告:fwrite()期望参数1是资源,第3行/var/www/cron.php中给出的布尔值警告:fclose()要求参数1为资源,第4行的/var/www/cron.php中给出布尔值。 请有人指导我!!
答案 0 :(得分:1)
有几个问题。正如您所注意到的那样,您的cron守护程序的实现不允许成为非root用户拥有的文件,并且出于同样的安全原因,您将无法使该文件成为全局可写文件。
您的cron作业行,至少在示例中,列出了应该是绝对的相对路径(“usr / bin / php”)。您的cron.php文件由root拥有并不意味着它以root用户身份运行。它由PHP执行并运行,因为它具有适当的组和/或其他权限位。并且您不应该以root身份运行方式更改权限(例如使用setuid-chmods)。
你可能应该做的是一个cronjob行,它充当PHP脚本的包装器。 PHP脚本从数据库中读取所有作业并执行它们,甚至是与您已创建的文本文件类似的文本文件。
这样,您可以以非root用户身份运行包装器脚本。大多数cron实现允许您在脚本之前使用“su”命令命名用户(例如www-data)(参见man 5 crontab
等)。
答案 1 :(得分:0)