不从安装在crontab中的shell脚本调用php脚本

时间:2015-11-11 04:56:36

标签: php linux crontab

我有move_files.sh并将其安装在crontab中。

实际上工作是有效的,因为它打印了那些回声。并创建日志文件。 但它没有调用PHP脚本。 有趣的是,如果我通过手动运行它来调用PHP脚本并100%工作。但是为什么我在crontab上安装后没有调用它。 我应该把" php"在调用php脚本之前。我认为cronjob与手动运行脚本的工作方式相同。请给我一点想法。

我的代码如下。

#!/usr/local/bin/bash

DIR=/data/aa/bb
LOG=~account/HOME/log/dd
DATE=`date +%Y%m%d`
LOG_FILE=$LOG/move_files.$DATE.log
PROG=~account/HOME/bin/move_files.php

for type in "1" "2" "3" 
do
  echo "Check files in $DIR/dat/$type" >> $LOG_FILE
  $PROG $DIR/dat/$type $DIR/backup/$type >> $LOG_FILE

  echo "Compress files in $type" >> $LOG_FILE
  find $DIR/backup -name "*.DAT" -type f -exec gzip -f {} \;  >> $LOG_FILE
done

4 个答案:

答案 0 :(得分:1)

我遇到了和你一样的问题。如果我的备份脚本直接调用但它根本没有在crontab中工作,那么它的工作效果非常好。我通过在bash脚本的开头(shebang之后)添加它来想出来:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt

凡" / opt"在最后一个是我的bash脚本所在的目录。

答案 1 :(得分:1)

尝试调用指定php二进制路径的脚本。

/path/to/php_binary script_file.php

E.g:

/usr/bin/php5 myscript.php argument1 argument2 >> mylogfile.log

答案 2 :(得分:0)

如果您在本地执行脚本,您将访问该文件夹(即~county / HOME / bin /)

通过执行cron,它将使用一个新的shell来执行当前路径中的* .sh文件。因此,您缺少的是访问包含 .php / .sh文件的路径。 (建议使用绝对路径)

cd ~account/HOME/bin/

可以创建日志文件,因为您发出了一个环境变量$ LOG,它指示该日志文件的确切位置。

答案 3 :(得分:0)

谢谢你们, 无论如何我按照以下行放置了myscript:

export PATH = $ PATH:/ usr / local / bin

然后它现在正在运作。

谢谢你们所有人。