Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование в *nix (http://forum.oszone.net/forumdisplay.php?f=35)
-   -   Помогите уменьшить bash скрипт (http://forum.oszone.net/showthread.php?t=307323)

novi 30-10-2015 16:35 2569813

Помогите уменьшить bash скрипт
 
Добрый день. Помогите уменьшить bash скрипт.
Задача скрипта: Мониторить процесс, в случае его отсутствия запускать скрипт и выполнять команду по запуску. Если процесс присутствует, то ничего не запускать.
Программа запуска с параметрами выглядит так: /home/temp/programma /home/temp/sys01.txt
1. /home/temp/programma в единственном экземпляре
2. /home/temp/sys01.txt много текстовых файлов. различие только в цифрах имени файла.

Пример: В процессах висит команда /home/temp/programma /home/temp/sys02.txt, скрипт запускается по крону и проверяет, если есть, то закончить работу не запуская команду /home/temp/programma /home/temp/sys02.txt.
А также в тот же момент проверки всех процессов (которые перечислены в файле script.sh) отсутствует например запущенный процесс /home/temp/programma /home/temp/sys15.txt, то он запускается команду /home/temp/programma /home/temp/sys15.txt, для того чтобы процесс появился.
ЗЫ. В какой-то момент, некоторые sysXX.txt могут быть удалены (ну то есть ненужны будут) из файла script.sh. (например sys43.txt, sys45.txt, sys18.txt, sys26.txt и их запускать ненужно)

Что на данный момент есть.

all.sh


#!/bin/bash

NUM=`/bin/pidof -o $$ -o $PPID -o %PPID -x /home/temp/programma |pgrep -f sys01|wc -w`
NUM=`/bin/pidof -o $$ -o $PPID -o %PPID -x /home/temp/programma |pgrep -f sys02|wc -w`
тут и далее много таких строк
NUM=`/bin/pidof -o $$ -o $PPID -o %PPID -x /home/temp/programma |pgrep -f sys50|wc -w`

if [ $NUM -lt 0 ]
then
exit
else
/home/temp/script.sh //в этом скрипте перечислены команды запуска , чуть ниже его код

fi
NUM=`/bin/pidof -o $$ -o $PPID -o %PPID -x /home/temp/programma |pgrep -f sys01|wc -w`
NUM=`/bin/pidof -o $$ -o $PPID -o %PPID -x /home/temp/programma |pgrep -f sys02|wc -w`
тут и далее много таких строк
NUM=`/bin/pidof -o $$ -o $PPID -o %PPID -x /home/temp/programma |pgrep -f sys50|wc -w`

if [ $NUM -lt 0 ]
then
exit
fi
exit 0 # прекращаем выполнение скрипта

script.sh

/home/temp/programma /home/temp/sys01.txt
/home/temp/programma /home/temp/sys02.txt
/home/temp/programma /home/temp/sys03.txt
тут и далее меняются только цифры в имени файла
/home/temp/programma /home/temp/sys50.txt


уф... увы, я не могу уменьшить скрипт (незнаю как правильно), будьте добры, пожалуйста помогите его уменьшить переменными или как либо ещё.
В данном варианте скрипта all.sh по крону, как я понимаю, запускаются все команды одновременно, что неправильно.

Ardenen 08-12-2015 14:41 2582718

Код:

#!/bin/bash

PROG="/home/temp/programma"

PROG_ARGS="/home/temp/programma /home/temp/sys01.txt
/home/temp/programma /home/temp/sys02.txt
/home/temp/programma /home/temp/sys03.txt
тут и далее меняются только цифры в имени файла
/home/temp/programma /home/temp/sys50.txt"

IFS=$'\n'

for ARG in $PROG_ARGS; do
 if ps ax -o command | grep -v grep | grep -q "$PROG $ARG"; then
  continue
 else
  $PROG $ARG
 fi
done



Время: 16:24.

Время: 16:24.
© OSzone.net 2001-