linux - 在终端中运行良好的 Shell 脚本不会在 crontab 中产生预期输出

标签 linux shell cron automation

我尝试每 15 到 45 分钟使用 cron 运行一次 shell 脚本。但由于一些模糊的原因,它在由 cron 执行时总是产生空字符串,而当我使用终端 ./my_script.sh 运行时,它会产生预期的结果。我读了很多与这个问题相关的答案,但没有一个能解决我的问题。

代码:

 #!/bin/bash
 PATH=/bin:/home/mpadmin/bin:/opt/ant/bin:/opt/cc/bin:/opt/cvsconsole:/opt/cvsconsole:/opt/cvsconsole:/sbin:/usr/bin:/usr/lib/qt-3.3/bin:/usr/local/bin:/usr/local/sbin:/usr/sbin:/var/mp/95930/scripts:/var/mp/95930/opt/bin:/opt/prgs/dlc101c/bin:/opt/cvsconsole
    tail -n 1000000 conveyor2.log | grep -P 'curingresult OK' | sed 's/FT\ /FT/g' |awk '{print $5 $13}' |sed 's/\"//g' | uniq | sort -n |uniq > /var/www/html/95910/master_list.txt
    tail -n 1000000 registration.log | grep -P 'TirePresent: 8' | sed 's/GT\ /GT/g' |awk '{print $7 $15}' |sed 's/\"//g' | uniq | sort -n |uniq > /var/www/html/95910/TBM_list.txt

我的计划

# run 15 and 45 mins every hour, every day
15,47 * * * *   sh /var/mp/95910/log/update_master_list.sh

权限:

所有用户都拥有所有文件的读写和执行权限

希望我已经提供了所有相关和必要的信息

最佳答案

可能您需要先更改到/var/mp/95910/log/目录...

#!/bin/bash
cd /var/mp/95910/log/
PATH=/bin:/home/mpadmin/bin:/opt/ant/bin:/opt/cc/bin:/opt/cvsconsole:/opt/cvsconsole:/opt/cvsconsole:/sbin:/usr/bin:/usr/lib/qt-3.3/bin:/usr/local/bin:/usr/local/sbin:/usr/sbin:/var/mp/95930/scripts:/var/mp/95930/opt/bin:/opt/prgs/dlc101c/bin:/opt/cvsconsole
tail -n 1000000 conveyor2.log | grep -P 'curingresult OK' | sed 's/FT\ /FT/g' |awk '{print $5 $13}' |sed 's/\"//g' | uniq | sort -n |uniq > /var/www/html/95910/master_list.txt
tail -n 1000000 registration.log | grep -P 'TirePresent: 8' | sed 's/GT\ /GT/g' |awk '{print $7 $15}' |sed 's/\"//g' | uniq | sort -n |uniq > /var/www/html/95910/TBM_list.txt

或明确指定文件路径

#!/bin/bash
PATH=/bin:/home/mpadmin/bin:/opt/ant/bin:/opt/cc/bin:/opt/cvsconsole:/opt/cvsconsole:/opt/cvsconsole:/sbin:/usr/bin:/usr/lib/qt-3.3/bin:/usr/local/bin:/usr/local/sbin:/usr/sbin:/var/mp/95930/scripts:/var/mp/95930/opt/bin:/opt/prgs/dlc101c/bin:/opt/cvsconsole
tail -n 1000000 /var/mp/95910/log/conveyor2.log | grep -P 'curingresult OK' | sed 's/FT\ /FT/g' |awk '{print $5 $13}' |sed 's/\"//g' | uniq | sort -n |uniq > /var/www/html/95910/master_list.txt
tail -n 1000000 /var/mp/95910/log/registration.log | grep -P 'TirePresent: 8' | sed 's/GT\ /GT/g' |awk '{print $7 $15}' |sed 's/\"//g' | uniq | sort -n |uniq > /var/www/html/95910/TBM_list.txt

关于linux - 在终端中运行良好的 Shell 脚本不会在 crontab 中产生预期输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31969883/

相关文章:

c++ - 为什么c++ pthread会自行退出而不导致进程崩溃?

elasticsearch - 如何在Shopware的cron中使用elasticsearch的api?

作为 cron 运行的 C 脚本给予权限被拒绝错误

linux - "All"和 "Bot"在 vi​​m 状态行中意味着什么?

linux - 在 MPI 集群上运行 C 程序

linux - Docker 环境变量未正确传递

python - 从 python 获取命令的终端输出

bash - 如何查找名称以 "a"开头的文件?

linux - 在linux命令行上按时间戳对日志文件进行排序

sql-server - 使用 R 和 SQL Server 的 Cron 作业