【问题标题】:Execute PHP script in cron job在 cron 作业中执行 PHP 脚本
【发布时间】:2024-01-16 03:12:01
【问题描述】:

在我们的 centos6 服务器中。我想以apache用户的身份在cron作业中执行一个php脚本,但不幸的是它不起作用。

这里是crontab的版本(crontab -uapache -e)

24 17 * * * php /opt/test.php

这里是“test.php”文件的源代码,它可以在“apache”用户作为所有者时正常工作。

<?php exec( 'touch /opt/test/test.txt');?>

我尝试用 php 的完整路径 (/usr/local/php/bin/php) 替换 php,但它也不起作用

提前致谢, 请帮帮我

【问题讨论】:

  • 肯定只有“php”就足够了吗?根据我使用 CentOS 的经验,正确配置 PHP 以及它所需要的所有安全性和诸如此类的东西可能是一场噩梦。

标签: php linux apache cron centos


【解决方案1】:

我尝试了所有与 PATH 的组合,但都不起作用。 可能需要它们。

在我的例子中,使用 Centos 7,重启或服务器工作正常。

【讨论】:

    【解决方案2】:

    您可能需要以有权执行 PHP 脚本的用户身份运行 cron 作业。尝试使用命令runuser (man runuser) 以 root 身份执行 cron 作业。或者创建一个系统 crontable 并以授权用户身份运行 PHP 脚本,如@Philip 所述。

    我在这篇 * 帖子中提供了如何使用 cron 的详细答案。

    How to write a cron that will run a script every day at midnight?

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题...我必须以用户身份运行它。

      00 * * * * root /usr/bin/php /var/virtual/hostname.nz/public_html/cronjob.php
      

      【讨论】:

        【解决方案4】:

        Automated Tasks: Cron

        Cron 是 Linux / 类 Unix 计算机操作系统中基于时间的调度服务。 Cron 作业用于安排定期执行的命令。 您可以设置命令或脚本,它们将在设定的时间重复运行。 Cron 是 Linux 或 UNIX 类操作系统中最有用的工具之一。 cron 服务(守护程序)在后台运行并不断检查 /etc/crontab 文件、/etc/cron./* 目录。它还会检查 /var/spool/cron/ 目录。

        配置 Cron 任务

        在以下示例中,如下所示的 crontab 命令 将每十分钟自动激活一次 cron 任务:

        */10 * * * * /usr/bin/php /opt/test.php
        

        在上面的示例中,*/10 * * * * 表示任务应该何时发生。第一个数字代表分钟——在这种情况下,每“十”分钟。其他数字分别代表小时星期几

        * 是一个通配符,意思是“每次”

        首先通过在命令行中键入查找您的 PHP 二进制文件:

        whereis php
        

        输出应该是这样的:

        php: /usr/bin/php /etc/php.ini /etc/php.d /usr/lib64/php /usr/include/php /usr/share/php /usr/share/man/man1/ php.1.gz

        在命令中正确指定完整路径。

        键入以下命令进入cronjob:

        crontab -e
        

        看看你在crontab中得到了什么。

        编辑 1:

        要退出 vim 编辑器而不保存只需单击:

        Shift+:
        

        然后输入q!

        【讨论】:

        • 感谢您的回复,我这样做了,但我想在 apache crontab (crontab -uapache -e) 中执行该脚本,但该脚本尚不可用。实际上脚本在 crontab 根目录中工作正常(当我在 crontab -e 中添加它时)
        • @Khalilos 应该是crontab -u apache -e,你是这个意思吗?
        • 是的,但是当我在 'crontab -u apache -e' 中添加脚本时它不起作用
        • 应该是/usr/bin/php -f /opt/test.php,而不是/usr/bin/php /opt/test.php
        • @user2768 Both ways (whether using the -f switch or not) execute the file my_script.php. Note that there is no restriction on which files can be executed; in particular, the filename is not required have a .php extension. php.net/manual/en/features.commandline.usage.php