如何通过PHP(而不是CPanel)设置cron作业?

如何通过PHP(而不是CPanel)设置cron作业?,php,Php,如何通过PHP(而不是CPanel)设置cron作业?大多数安装了crond的Linux系统提供了一些可以设置作业的目录: /etc/cron.d/ /etc/cron.daily/ /etc/cron.weekly/ /etc/cron.monthly/ ... 这里的想法是在其中一个目录中创建一个文件。您需要为这些(或其中一个)目录设置适当的权限/所有权,以便启动PHP脚本的用户可以对其进行写入(如果是web脚本,则为Apache用户;如果使用CLI,则为任何CLI用户) 最简单的方法是创

如何通过PHP(而不是CPanel)设置cron作业?

大多数安装了
crond
的Linux系统提供了一些可以设置作业的目录:

/etc/cron.d/
/etc/cron.daily/
/etc/cron.weekly/
/etc/cron.monthly/
...
这里的想法是在其中一个目录中创建一个文件。您需要为这些(或其中一个)目录设置适当的权限/所有权,以便启动PHP脚本的用户可以对其进行写入(如果是web脚本,则为Apache用户;如果使用CLI,则为任何CLI用户)

最简单的方法是创建一个空文件,为其分配适当的权限/所有权,并让PHP脚本附加/修改它

每个示例:

$ touch /etc/cron.d/php-crons
$ chown www-data /etc/cron.d/php-crons
然后在PHP中:

$fp = fopen('/etc/cron.d/php-crons', 'a');
fwrite($fp, '* 23 * * * echo foobar'.PHP_EOL);
fclose($fp);

自2004年以来,禁止使用PHP编辑crontab。如果您居住在美国境外,您可能不被允许这样做,请咨询当地政府机构


但说真的,您可以通过系统调用调用“crontab-”。如果需要为Web服务器以外的其他用户执行此操作,则需要一些ssh或sudo魔法。但这似乎是一个坏主意。

如果您的目的是在应用程序的crontab表单中动态添加大量作业,那么更好的方法是手动添加一个cron作业:

php -f /path/to/your/runner.php

将您要手动添加到cron的作业存储在一个表中(或每种任务类型一个表),然后让您的运行人员每分钟/小时/天/任何时间检查一次表,并执行当时应该执行的所有作业。

从纯PHP我将创建deamon来管理这个(那些)cron作业

如何创建它:
首先,在共享主机上查找crontab文件并不容易,而且不确定cron会在文件运行时再次读取该文件。 实际上,我认为最好的方法是使用corntab命令

如果您没有访问shell的权限,可以使用例如PHPShell。试试这个

  • 例如,使用crontab fomat中的作业通过FTP上传txt文件

    5****/some/file/to/run.sh>/dev/null

(记住在该行末尾加一个换行符)

  • 登录到您的PHPShell并运行

    crontab上传文件名.txt

  • 请记住更改文件权限

    chmod 775上传文件名.txt

  • 使用以下命令检查cron作业

    crontab-l


干杯

您将遇到的第一个问题是这样做的权限。搜索da goog可以获得许多通过cron作业运行php的示例,但反之亦然。我也有兴趣得到这个问题的答案。