【问题标题】:Integrating php in shell scripts for a cronjob?将 php 集成到 cronjob 的 shell 脚本中?
【发布时间】:2012-09-06 07:25:48
【问题描述】:

我想每 X 小时为例行任务执行一次 cronjob。 cronjob 基本上执行一个 shell 脚本,该脚本又使用 WGET 命令从远程服务器下载文件。但是,在我运行这个 shell 脚本之前,我希望 cronjob 执行一个 php 脚本,它将检查更新是否可用(浪费 BW 并一遍又一遍地下载相同的文件是没有意义的),如果是,它应该传递shell 脚本的更新 URL,该脚本又使用 WGET 命令。

cronjobs 是从主机管理面板设置的。没有其他方法可以解决它。作为共享托管服务,我不允许访问 PHP 上可能为我完成任务的其他功能。

这可能吗?我是Linux文盲。我已经在 Fedora 上安装了一些 RPM,但仅此而已。请多多包涵。谢谢!

【问题讨论】:

    标签: php cron cron-task


    【解决方案1】:

    只需将--timestamping 传递给您的 wget 命令即可。

    或者,如果您更熟悉 PHP 的方法,您可以查看this question 以获取可用的方法。

    使用 curl HEAD 请求获取文件的标头并解析出 Last-Modified: 标头。

    要将 php 脚本用作常规命令行可执行文件,请使用此作为起点:

    #!/bin/env php
    <?php
    echo "Hello World\n";
    

    保存不带 .php 的文件,并将其放在服务器无法提供的位置。

    接下来,设置可执行位,以便您可以像执行常规程序一样执行脚本 (以下命令中的u+x 表示为helloworld 授予[u]ser e[x]ecute 权限,chmod 是unix 变体用来设置文件权限的命令)

    省略以下序列中的 $,因为它代表命令提示符

    $ chmod u+x helloworld

    现在您可以通过在 bash 提示符中调用命令行脚本来执行它:

    $ ls
    helloworld
    $ ./helloworld
    Hello World
    $
    

    从这里你可以得到可执行脚本的完整路径:

    $ readlink -f helloworld
    /home/SPI/helloworld
    

    现在您可以使用可执行脚本的路径来安装 cronjob。

    【讨论】:

    • 我显然不讲道理。您链接到我的文档非常有用。我显然可以使用它来循环浏览一个链接文件并下载每个链接: wget -i file 这样的东西有用吗? wget --timestamping -i 文件名?
    • 应该,如果不是,我相信 wget 会认为这是一个错误
    • 您上面的教程非常有帮助,如果可以的话,我会为您的回答加分;)不过,当我通过 bash 执行脚本时,我还有另一个问题:./ path_to_script/script_name,有没有办法将脚本的返回值存储在 bash 变量中?
    猜你喜欢
    • 2015-12-14
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    相关资源
    最近更新 更多