Linux. Задачи на bash 2.

Решил выделить в отдельный блок интересные задачи на bash с их решением Блок статей «Задачи на bash»
Предлагаю вторую задачу из данного цикла.

Задача. ОС Linux. Необходимо запускать скрипт script13 каждые 13 секунд, но не более одного одновременно запущенного процесса.

Решение состоит из 2-х скриптов, первый скрипт start13

#!/bin/bash
lockfile=/tmp/script13.lock
script13=/root/script/13/script13 # путь до скрипта, который необходимо выполнять.
 
while [ 1 -gt 0 ]
do
    if [ ! -e $lockfile ];then
        > $lockfile
        $script13 &
    fi
    sleep 13
done

запускается в фоне ./start13 & и каждые 13 секунд проверяет есть ли файл блокировки /tmp/script13.lock , если нет, то создает его и запускает целевой скрипт, если есть то ожидает еще 13 сек. и так далее.

Целевой скрипт по окончанию своего выполнения удаляет /tmp/script13.lock

#!/bin/bash
lockfile=/tmp/script13.lock
########
#тело скрипта
########
rm $lockfile

Такое решение можно применять на практике, ведь как мы знаем минимальная единица времени в планировщике задач cron 1 минута. Если у кого то есть другие решения, их можно отписать в комментариях.

2 Comments

  1. Fredyk

    Можно и одним скриптом обойтись, «вживив» данный код в тело скрипта

    #!/bin/bash

    PIDFILE=/tmp/script13.pid
    if [ -f $PIDFILE ]
    then
      PID=$(cat $PIDFILE)
      ps -p $PID > /dev/null 2>&1
      if [ $? -eq 0 ]
      then
        echo «Process is already running»
        exit 1
      else
        ## Process not found, assume not running
        echo $$ > $PIDFILE
        if [ $? -ne 0 ]
        then
          echo «Could’t create PID file»
          exit 1
        fi
      fi
    else
      echo $$ > $PIDFILE
      if [ $? -ne 0 ]
      then
        echo «Could’t create PID file»
        exit 1
      fi
    fi

    ###########
    ## Body of Script
    ###########

    rm $PIDFILE

    1. admin

      «ОС Linux. Необходимо запускать скрипт script13 каждые 13 секунд, но не более одного одновременно запущенного процесса.» Не вижу реализации условия задачи. 

      Ваше решение больше похоже на init скрипт.

Comments are closed.