【问题标题】:Execute php file from bash script as www-data using crontab使用 crontab 将 bash 脚本中的 php 文件作为 www-data 执行
【发布时间】:2015-08-06 22:19:04
【问题描述】:

我正在尝试使用 crontab 每晚在某个时间运行一个 php 文件,但是由于目录权限,该 php 需要作为 www-data 运行。以www-data 运行它,我使用root crontab 并在其中更改用户,如下所示:

* 20 * * * sudo -u www-data /usr/bin/env TERM=xterm /path/to/dailyProc.sh

dailyProc如下

today=`date +"%d%m%y"`

year=`date +"%y"`

dm=`date +"%m%d"`

`tar -zxf /path/to/input/$today.tgz -C /path/to/output`

echo "starting data proc"

`/usr/bin/php5 -f /path/to/dataproc.php date=$dm year=$year`

echo "data proc done"

dailyProc.sh 中的所有其他命令都可以工作,但 php 不运行。 php正在使用输出缓冲区并将其写入文件,从命令行调用它可以正常工作,但在通过cron调用时不起作用。

我也绝对可以使用命令行以www-data 运行dailyProc.sh

sudo -u www-data dailyProc.sh

一切都按预期进行。

有什么原因我无法在dailyProc.sh 中使用 crontab 运行这个 php 文件,而其中的其他一切都正常工作?

【问题讨论】:

  • 您在脚本中使用#!/bin/bash 吗?
  • 有两个以 root 权限运行的 crontab 文件。一个是/etc/crontab,另一个是/var/spool/cron/crontabs/root。您正在使用其中之一吗?
  • 检查 crontab -l 以确保您的 crontab 已注册。另外,检查日志,可能在/var/log/syslog
  • @alex 不,但脚本中的其他所有内容都运行良好,我需要它还是只是更好的做法?要编辑我使用sudo contab -e 的crontab,我读到编辑etc/crontab 不是一个好主意,因为系统可以覆盖它?
  • @JohnCartwright 这两个都表明 dailyProc.sh 正在运行,它是,但是它里面的 php 不是。

标签: php bash cron crontab


【解决方案1】:

这对我有用:

* 20 * * * su - www-data -C "/path/to/dailyProc.sh"

【讨论】:

  • 这返回了以下错误/usr/bin/env: Syntax error: word unexpected (expecting ")")
【解决方案2】:

您不需要在 crontab 条目中使用 susudo,因为无论如何第 6 列都是用户名。而且您不需要启动终端,因为无论如何您都不会看到它。因此,应该执行以下操作:

* 20 * * * www-data /path/to/dailyProc.sh

您在评论中提到的Syntax error: word unexpected… 似乎在您的代码中。尝试从命令行运行脚本并从那里开始调试。

【讨论】:

  • 如果直接编辑/etc/crontab,用户是否只是一个参数?使用sudo crontab -e 尝试此操作时,我收到以下错误/bin/sh: 1: www-data: not found
  • 当您使用crontab -e 时,您正在创建/编辑一个个人 crontab。然后用户列没有被使用,第 6 列已经是命令。如果您希望脚本由其他用户执行,请直接编辑 /etc/crontab
【解决方案3】:

为此,我在 dailyProc.sh 中使用了 curl

today=`date +"%d%m%y"`

year=`date +"%y"`

dm=`date +"%m%d"`

`tar -zxf /path/to/input/$today.tgz -C /path/to/output`

echo "starting data proc"

`/usr/bin/curl "myserver.com/dataproc.php?date=$dm?year=$year"`

echo "data proc done"

【讨论】:

    【解决方案4】:

    Cron 也可以按用户运行。

    crontab -u www-data -e
    

    【讨论】:

      猜你喜欢
      • 2018-07-03
      • 2016-03-02
      • 2013-04-19
      • 2017-12-12
      • 2020-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-06
      相关资源
      最近更新 更多