【问题标题】:How to have wp-cli commands work in a bash script from cron如何让 wp-cli 命令在 cron 的 bash 脚本中工作
【发布时间】:2019-11-08 23:38:41
【问题描述】:

我有一个带有各种 WP-CLI 命令的 bash 脚本来运行备份、检查和优化数据库表、运行安全漏洞检查、检查可用的核心、插件和主题更新,然后通过电子邮件将报告发送给我。

如果我从命令行运行此脚本,它会完美运行。但是,如果我安排一个 cronjob,脚本会运行,但所有 WP 命令的输出都是这样的:

/usr/local/bin/dev-maintenance-check.bash:第 70 行:wp:找不到命令

我尝试了各种不同的 cron 作业格式,但均无济于事。这是当前的 cronjob:

0 1 * * 0,3 bash /usr/local/bin/dev-maintenance-check.bash

我的 WP-cli 安装在 usr/local/bin/wp。再一次,如果我在命令行中运行“bash /usr/local/bin/dev-maintenance-check.bash”,那就可以了。

对我来说,听起来 wp-cli 需要在脚本中调用。我确信我已经在 wp-cli 文档上用尽了我在 Google 上的搜索。任何帮助将不胜感激。

【问题讨论】:

    标签: wordpress bash wp-cli


    【解决方案1】:

    由于您的脚本是一个 shell 脚本 (/bin/sh),因此您的 PATH 条目位于 .bashrc 不会像 bash (/bin/bash) 那样被读取 交互式外壳。

    使您的 PATH 条目可用于由 a 运行的 /bin/sh 脚本 特定用户,将 PATH 条目添加到该用户的 .profile 文件中 主目录。

    https://unix.stackexchange.com/a/163126/72176


    所以,有趣的部分不是您的 crontab,而是您的脚本。只需将绝对或相对位置称为wp 或按照上面的建议进行修复,它应该可以工作。

    绝对:

    #!/usr/bin/env bash
    cd /var/www/wordpress
    /usr/local/bin/wp cache flush
    

    相对(作为本地 Composer 依赖安装的 WP-CLI):

    #!/usr/bin/env bash
    cd /var/www/wordpress
    vendor/bin/wp cache flush
    

    【讨论】:

    • 最好设置 PATH 变量,以便 cron 可以找到我想要运行的命令。我必须将以下行放在 crontab 文件的开头。 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
      问题是:如何验证这是我必须使用的正确路径吗?
    最近更新 更多