21

我正在尝试按计划运行 php 脚本。所以我认为 crontab 是一个好主意。我使用的服务器在我不太熟悉的 Linux 上。所以我遇到的问题是,我不知道如何使脚本从 php 可执行。我需要引用该脚本,或者将其放入可以从命令行运行 php 的文件夹中。所以我不知道给我的 crontab 提供什么路径,例如:

5  * * * * var/www/some/path/script.php

我发现了一些关于这个 php 可执行文件的模糊信息

/usr/bin/php

但是我在那里找不到任何php文件,也许我没有安装它?我的 php5 和 apache 安装在:

/etc/php5

所以我的问题变成了,是否有任何其他文件夹中的 crontab 执行 php 脚本,或者我只是缺少 usr/bin/php 中的 php 可执行文件?

4

6 回答 6

32

首先在命令行输入:

whereis php

以运行 cron 作业的用户身份执行此操作。这将向您显示可执行文件的路径。然后,您可以在 cron 条目中使用该路径(如果它不在 PATH 变量中):

5 * * * * /your/path/to/php /var/www/some/path/script.php

编辑:如果您只安装了 Apache PHP 模块,您可能需要安装php5-cli(Ubuntu 软件包名称)软件包。这将为您提供可以从命令行运行的二进制可执行文件。

于 2010-04-22T08:40:44.070 回答
7

这是Linux系统吗?

在较新的 Linux 发行版中,
实际上有一个方便的 crontab-setup 系统
,它不需要用户在 crontab 中输入任何内容。例如在 SuSE Linux 中,你有目录

/etc/cron.hourly/
/etc/cron.daily/
/etc/cron.monthly/
/etc/cron.weekly/

只需在这些目录中的任何一个中放置一个调用脚本(konno_php_start),例如

/etc/cron.hourly/konno_php_start

它是可执行的(chmod 755 左右)并包含:

#!/bin/sh
cd /var/www/some/path/
php  script.php >> logfile.txt 2>&1

并重新启动 cron 守护程序。就是这样。

从日志文件中,您将看到您的 php 解释器
是否会在 PATH 中找到。如果没有,请将 /etc/cron.hourly/konno_php_start 中的行更改为

/full/path/to/php  script.php >> logfile.txt 2>&1

问候

rbo

于 2010-04-22T08:47:37.820 回答
7

您可以在本地使用 wget 命令:

5  * * * * wget http://localhost/some/path/script.php
于 2015-10-30T03:21:32.123 回答
5

我必须找到跟踪才能找到可执行文件:

andy@ararat:~$ type php
php is /usr/bin/php

andy@ararat:~$ file /usr/bin/php
/usr/bin/php: symbolic link to `/etc/alternatives/php'

andy@ararat:~$ file /etc/alternatives/php
/etc/alternatives/php: symbolic link to `/usr/bin/php5'

andy@ararat:~$ file /usr/bin/php5
/usr/bin/php5: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped

所以你需要包含 /usr/bin/php5 作为 php 可执行文件的路径,如下所示:

andy@ararat:~$crontab -e
#*/1 * * * * /usr/bin/php5 /home/andy/www/dev.com/corp_rewards_cron.php
于 2011-09-22T09:08:41.600 回答
2

您也可以使用env,它会为您找到并启动 php:

/usr/bin/env php /var/www/some/path/script.php

或者你可以在你的 script.php 中放置一个 shebang(第一行):

#!/usr/bin/env php

然后让它可执行,并让 crontab 直接调用它,就像在你的第一个例子中一样:

5  * * * * /var/www/some/path/script.php
于 2010-04-22T09:06:43.320 回答
0

我建议你这样做,

*/5 * * * * /path/gridmon2.pl 1> /dev/null 2> /dev/null

在你的 .pl 代码中,你应该使用 wget 或类似的东西 grep:

wget "/www/root/index.php"

或者你可以这样做:

/usr/bin/wget "/www/root/index.php"

这只是我的建议,我只尝试 wget 到外部站点而不是本地站点并且它有效。

请尝试恢复。

于 2010-04-22T09:14:32.110 回答