情况:
该系统用于运行需要很长时间的高端计算。很高兴在这个系统中使用 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
现在我想让这个脚本更加智能。我的计划是:
- 使用正则表达式来记录程序名称和文件名制表符分隔成一行。调用程序和文件的行如下,
./dalton -b ~/dalton/ExtBasis -w ~/dalton/calc/opt -omp 24 -mb 24000 <file_1> <file_2>
此程序的文件名位置是固定的。对于其他程序,只要我知道如何修改,我就可以修改。
记录作业的持续时间。使用开始和结束时间;
dt1
和dt2
。最好使用动态单位(例如,minutes
如果过程在一小时内完成,hours
如果在一天之前完成,然后days
如果需要超过一天)。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 "//--------------------------------------------------//"