用于记录程序运行的巧妙脚本

用于记录程序运行的巧妙脚本

情况:

该系统用于运行需要很长时间的高端计算。很高兴在这个系统中使用 Ubuntu。该过程由调用程序的脚本启动。此脚本可以有不同的名称。

我经常从一个地方移动到另一个地方,无法记录当前正在运行、已停止/失败或已成功完成的脚本。因此,我使用原始脚本在文件中创建条目。以下是我脚本的当前版本:

    #!/bin/bash
    # Running QM-JOB: helix HPC

    echo -e 'Job started @ '$dt'' >> /home/helix/calc/runlog.log

    #cd ~/ChemPackage/dalton/dalton  #32bit calc installation
    cd /home/vayu/ChemPackage/dalton_mod/dalton # custom coded (ln 56,548,954)modified installation
    echo "-----------------------------------------------"
    df -h /dev/md0
    echo "-----------------------------------------------"
    export DALTON_TMPDIR=/mnt/raid0/scratch
    export OMP_NUM_THREADS=24
    source /opt/intel/compilers_and_libraries_2017.0.098/linux/bin/compilervars.sh intel64
    source /opt/intel/mkl/bin/mklvars.sh intel64

    echo "//-------process started-GEOMETRY-OPTIMIZATION------//"
    dt1=$(date '+%d/%m/%Y %H:%M:%S');

    #following line calls the program and runs the job.
    ./dalton -b ~/dalton/ExtBasis -w  ~/dalton/calc/opt -omp 24 -mb 24000 geom_opt_preopt_l2 molecule

    dt2=$(date '+%d/%m/%Y %H:%M:%S');

    echo "//-----------------process FINISHED ----------------//"

我目前使用以下行记录作业运行,

echo -e 'Job started @ '$dt'' >> /home/helix/calc/runlog.log

现在我想让这个脚本更加智能。我的计划是:

  1. 使用正则表达式来记录程序名称文件名制表符分隔成一行。调用程序和文件的行如下,

./dalton -b ~/dalton/ExtBasis -w ~/dalton/calc/opt -omp 24 -mb 24000 <file_1> <file_2>

此程序的文件名位置是固定的。对于其他程序,只要我知道如何修改,我就可以修改。

  1. 记录作业的持续时间。使用开始和结束时间;dt1dt2。最好使用动态单位(例如,minutes如果过程在一小时内完成,hours如果在一天之前完成,然后days如果需要超过一天)。

  2. tail -20 <file1>_<file_2>.out 通过使用输出来记录该过程是否成功完成,该文件的文件名为第一个文件名和第二个文件名的连接,_中间带有下划线,扩展名是.out

有人可以帮我改进我的脚本吗?

答案1

我对脚本进行了如下修改: 以下脚本可以修改为与其他计算包一起使用(这里使用道尔顿)。

使用 ./<script name> <file1> <file2>(File1 和 File2 特定于我正在使用的程序。)

    #!/bin/bash
    # Running QM-JOB: helix HPC
        d="$1"  # .dal file
        m="$2"  # .mol file
    dt=$(date  '+%Y-%m-%d %H:%M:%S' )
    echo -e 'Job started @ '$dt'' >> ~/dalton/runlog.log
    cd /home/vayu/ChemPackage/dalton_mod/dalton # custom coded (ln 56,548,954)modified installation
    echo "-----------Scratch Disk Info-------------------"
    df -h /dev/md0
    echo "-----------------------------------------------"
    export DALTON_TMPDIR=/mnt/raid0/scratch
    export OMP_NUM_THREADS=6
    source /opt/intel/compilers_and_libraries_2017.0.098/linux/bin/compilervars.sh intel64
    source /opt/intel/mkl/bin/mklvars.sh intel64

    echo "//---------------process started-------------------//"
    dt1=$(date '+%Y-%m-%dT%H:%M:%S');
    #following line calls the program and runs the job.
    ./dalton -b ~/dalton/ExtBasis -w  ~/dalton/calc/molecule -omp 6 -mb 15999 $d $m

    dt2=$(date '+%Y-%m-%dT%H:%M:%S');
    dateutils.ddiff "$dt1" "$dt2" #time duration of job

    echo "//-----------------process FINISHED ----------------//"
    output=$( "$d"_"$m"".out")      ; echo $output
    tail -10 "$output" #last 10 lines of output file which tell me about the job's completion status(successful or failed !).
    echo "//--------------------------------------------------//"

相关内容