如何在 php 中运行 cron 作业

mis*_*irl 0 php cron

我有 php 函数,我希望每 15 分钟运行一次。我发现了一些这样的问题:

如何让 cron 来执行 php 脚本?

就我而言,我应该使用这个:

*/15 * * * * /usr/local/bin/php -q /path/to/my/file.p

但是我应该在终端中运行此命令还是将其放入我的文件中?一旦执行,是一直运行还是有时间限制?

谢谢!

lhe*_*ann 6

PHP 不运行 cron 作业,您的服务器(或操作系统)正在执行此操作。有两种方法可以让您的 cron 作业发挥作用:

#1

使用外壳命令crontab。该命令crontab -l将列出您的用户的所有现有 cronjobs(很可能还没有)。crontab -e将打开一个编辑器窗口,您可以在其中将 cron 作业作为新行放入。保存,您的 cron 作业现在正在运行。crontab -l再次,您将看到它列表。crontab -r删除所有连续作业。

您还可以从文件启动 cron 作业。只需键入crontab filename(例如crontab textfile.txt

或者,您也可以从 PHP 中启动它。只需将您的 cron 作业放入一个文件中并通过exec()如下方式启动它:

file_put_contents( 'textfile.txt', '*/15 * * * * /usr/local/bin/php -q /path/to/my/file.php' );
exec( 'crontab textfile.txt' );
Run Code Online (Sandbox Code Playgroud)

#2

如果您在系统上拥有管理员权限,您可以在中创建一个文件/etc/cron.d/(例如,将其命名为my_cronjob)并将您的 cron 作业放在那里。在这种情况下,您可能希望以用户身份运行它(而不是以管理员身份运行,那会相当不安全)。这很容易做到,只需添加用户名,如下所示:

*/15 * * * * user_name /usr/local/bin/php -q /path/to/my/file.p
Run Code Online (Sandbox Code Playgroud)

(在这种情况下,cron 作业将不会列在 下crontab -l


回答你的第二个问题:只要 cron 作业列在列表中crontab -l,或者只要文件位于/etc/cron.dcron 作业中,就运行一次,在你的情况下,每 15 分钟一次。