我有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
答案 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
然后它现在正在运作。
谢谢你们所有人。