使用crontab命令

时间:2017-09-28 18:28:05

标签: bash

我在自动生成csv文件时遇到了一些问题。用于生成csv的bash代码使用3个内核并行工作,以减少时间消耗;最初生成不同的csv文件,这些文件随后组合在一起形成单个csv文件。代码的核心是这个循环:

...
        waitevery=3

                for j in `seq 1 24`; do

                if((j==1)); then
                printf '%s\n' A B C D E | paste -sd ',' >> code${namefile}01${rr}.csv       
                fi
                j=$(printf "%02d" $j)

                ../src/thunderstorm --mask-file=mask.grib const_${namefile}$j${rr}.grib surf_${namefile}$j${rr}.grib ua_${namefile}$j${rr}.grib hl_const.grib out &      

                if ! ((c % waitevery)); then
                wait
                fi
                c=$((c+1))

            done
...

其中../src/thunderstorm是.F90代码,用于生成第二个和后续文件。 如果我手动运行此代码,它会生成正确的csv文件,但是如果我通过编程的crontab命令运行它,它会生成一个带有唯一标题{c} {/ p>的csv文件

一些建议? 谢谢!

2 个答案:

答案 0 :(得分:1)

cron在一个环境中运行你的脚本,这通常与你的期望不符。

检查PATH是否正确以及是否从正确的位置调用脚本:../src显然是相对的,但是对于什么?

在使用输入,输出和程序的完整路径时,我发现cron脚本更加可靠。

答案 1 :(得分:1)

正如@umläute所指出的, cron 运行您的脚本,但不会运行您打开终端会话时可能具有的典型初始化。这意味着您不必对您的环境做出任何假设。

对于可以从shell调用并且可以从 cron 调用的脚本,我通常在开头添加如下内容:

BIN_DIR=/home/myhome/bin
PATH=$PATH:$BIN_DIR

此外,请确保不要使用../src/thunderstorm等可执行文件的相对路径。 cron 调用的脚本的工作目录可能不是您的想法。您可以使用$BIN_DIR/../src/thunderstorm。如果要保存输入,请将相关目录添加到PATH

所有其他shell变量都采用相同的逻辑。

在脚本开头做一个好的初始化,你可以从shell运行它来进行测试(或手动执行),然后把它作为 cron 作业运行。