Um script inteligente para executar o programa de log

0

Situação:

O sistema é usado para executar cálculos high-end levando muito tempo. Fico feliz em usar o Ubuntu para este sistema. O processo é iniciado com um script que chama o (s) programa (s). Este script pode ter nomes diferentes.

Eu continuo mudando de um lugar para outro, e não consigo manter um registro de scripts em execução no momento ou interrompi / falhei ou terminei com êxito. Por isso, eu uso o script original para fazer uma entrada em um arquivo. A seguir está a versão atual do meu script:

    #!/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 ----------------//"

Eu atualmente faço o log da execução do trabalho usando a seguinte linha,

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

Agora quero tornar esse script mais inteligente. Meu plano:

  1. Use a ideia de regex para registrar a nome do programa e a guia dos nomes dos arquivos separados em uma única linha. A linha chamando o programa e os arquivos está seguindo,

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

A posição dos nomes dos arquivos para este programa é fixa. Para outros programas, posso modificar quando tiver uma ideia de como fazer isso.

  1. Registre a duração do tempo do trabalho. Usando o horário de início e término; dt1 e dt2 . Seria melhor usar unidades dinâmicas (digamos, minutes se o processo for concluído em uma hora e hours se terminar antes de um dia e, em seguida, days se levar mais de um dia.

  2. Registre se o processo foi concluído com êxito usando tail -20 <file1>_<file_2>.out A saída é fornecida como um arquivo que possui nome de arquivo como concatenação do primeiro nome de arquivo e segundo nome de arquivo com sublinhado _ entre com extensão .out .

Alguém pode me ajudar a melhorar meu roteiro?

    
por ankit7540 16.12.2016 / 13:27

1 resposta

0

Eu modifiquei meu script da seguinte forma: O script a seguir pode ser modificado para funcionar com outros pacotes de cálculo (aqui é usar dalton).

Usando ./<script name> <file1> <file2> (Arquivo1 e Arquivo2 são específicos do programa que estou usando.)

    #!/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 "//--------------------------------------------------//"
    
por ankit7540 04.01.2017 / 12:33