Рейтинг:3

Скрипт Bash запускается более одного раза. Не знаю, почему

флаг in

У меня есть очень простой скрипт bash, который каждую минуту запускается как задание cron. Он делает журнал в файл.Все работает нормально, но есть одна странность. Скрипт делает более одного лога одновременно. Я не понимаю, как это возможно. Вот код.

#!/бин/баш


# -c возвращает количество строк в результате grep
isActive=$(статус systemctl elasticsearch | grep "активен (работает)" -c)

если (( $ isActive == 0 )) 
тогда

  systemctl запустить поиск по эластикам
  
  отметка времени=$(дата +"%Y-%m-%d %H-%M-%S")
  коснитесь /root/custom-scripts/elasticsearch/start.log
  echo "Служба Elasticsearch ${timestamp} должна быть перезапущена с помощью /root/custom-scripts/elasticsearch/start-elasticsearch.sh, поскольку статус службы не был активен." >> /root/custom-scripts/elasticsearch/start.log

фи

Работа cron

* * * * * bash /root/custom-scripts/elasticsearch/start-elasticsearch.sh

Лог-файл выглядит так

2021-07-13 16-17-45 Службу Elasticsearch необходимо перезапустить с помощью /root/custom-scripts/elasticsearch/start-elasticsearch.sh, поскольку статус службы не был активен.
2021-07-13 16-17-45 Службу Elasticsearch необходимо перезапустить с помощью /root/custom-scripts/elasticsearch/start-elasticsearch.sh, поскольку статус службы не был активен.
2021-07-13 16-17-45 Службу Elasticsearch необходимо перезапустить с помощью /root/custom-scripts/elasticsearch/start-elasticsearch.sh, поскольку статус службы не был активен.
2021-07-13 16-17-45 Службу Elasticsearch необходимо перезапустить с помощью /root/custom-scripts/elasticsearch/start-elasticsearch.sh, поскольку статус службы не был активен.
2021-07-13 16-20-15 Службу Elasticsearch необходимо перезапустить с помощью /root/custom-scripts/elasticsearch/start-elasticsearch.sh, поскольку статус службы не был активен.
2021-07-13 16-20-15 Службу Elasticsearch необходимо перезапустить с помощью /root/custom-scripts/elasticsearch/start-elasticsearch.sh, поскольку статус службы не был активен.
2021-07-13 16-20-15 Службу Elasticsearch необходимо перезапустить с помощью /root/custom-scripts/elasticsearch/start-elasticsearch.sh, поскольку статус службы не был активен.
2021-07-13 16-23-11 Службу Elasticsearch необходимо перезапустить с помощью /root/custom-scripts/elasticsearch/start-elasticsearch.sh, поскольку статус службы не был активен.
2021-07-13 16-26-36 Службу Elasticsearch необходимо перезапустить с помощью /root/custom-scripts/elasticsearch/start-elasticsearch.sh, поскольку статус службы не был активен.
2021-07-13 16-26-36 Службу Elasticsearch необходимо перезапустить с помощью /root/custom-scripts/elasticsearch/start-elasticsearch.sh, поскольку статус службы не был активен.
2021-07-13 16-26-36 Службу Elasticsearch необходимо перезапустить с помощью /root/custom-scripts/elasticsearch/start-elasticsearch.sh, поскольку статус службы не был активен.
2021-07-13 16-33-13 Службу Elasticsearch необходимо перезапустить с помощью /root/custom-scripts/elasticsearch/start-elasticsearch.sh, поскольку статус службы не был активен.
2021-07-13 16-33-13 Службу Elasticsearch необходимо перезапустить с помощью /root/custom-scripts/elasticsearch/start-elasticsearch.sh, поскольку статус службы не был активен.
2021-07-13 16-33-13 Службу Elasticsearch необходимо перезапустить с помощью /root/custom-scripts/elasticsearch/start-elasticsearch.sh, поскольку статус службы не был активен.
2021-07-13 16-33-13 Службу Elasticsearch необходимо перезапустить с помощью /root/custom-scripts/elasticsearch/start-elasticsearch.sh, поскольку статус службы не был активен.
2021-07-13 16-33-25 Службу Elasticsearch необходимо перезапустить с помощью /root/custom-scripts/elasticsearch/start-elasticsearch.sh, поскольку статус службы не был активен.
2021-07-13 16-34-10 Службу Elasticsearch необходимо перезапустить с помощью /root/custom-scripts/elasticsearch/start-elasticsearch.sh, поскольку статус службы не был активен.
2021-07-13 16-35-10 Службу Elasticsearch необходимо перезапустить с помощью /root/custom-scripts/elasticsearch/start-elasticsearch.sh, поскольку статус службы не был активен.
2021-07-13 16-40-39 Службу Elasticsearch необходимо перезапустить с помощью /root/custom-scripts/elasticsearch/start-elasticsearch.sh, поскольку статус службы не был активен.
2021-07-13 16-40-39 Службу Elasticsearch необходимо перезапустить с помощью /root/custom-scripts/elasticsearch/start-elasticsearch.sh, поскольку статус службы не был активен.
2021-07-13 16-40-39 Службу Elasticsearch необходимо перезапустить с помощью /root/custom-scripts/elasticsearch/start-elasticsearch.sh, поскольку статус службы не был активен.
2021-07-13 16-40-39 Службу Elasticsearch необходимо перезапустить с помощью /root/custom-scripts/elasticsearch/start-elasticsearch.sh, поскольку статус службы не был активен.
2021-07-13 16-40-39 Службу Elasticsearch необходимо перезапустить с помощью /root/custom-scripts/elasticsearch/start-elasticsearch.sh, поскольку статус службы не был активен.
2021-07-13 16-41-13 Службу Elasticsearch необходимо перезапустить с помощью /root/custom-scripts/elasticsearch/start-elasticsearch.sh, поскольку статус службы не был активен.
2021-07-13 16-42-07 Службу Elasticsearch необходимо перезапустить с помощью /root/custom-scripts/elasticsearch/start-elasticsearch.sh, поскольку статус службы не был активен.

Есть ли кто-нибудь, кто может мне это объяснить? Большое спасибо.

флаг hr
Не имеет отношения к проблеме, но у systemctl есть действие «is-active», которое вы можете протестировать непосредственно, например. `if systemctl --quiet is-active elasticsearch; тогда ...`
флаг in
Спасибо, я не знал об этом.
флаг hr
Единственное, что я могу придумать, может объяснить то, что вы видите, это наличие в файле elasticsearch.service ExecStartPre или ExecStartPost, который (прямо или косвенно) вызывает один и тот же скрипт.
флаг in
Не понимаю. Elasticsearch не знает о скрипте.
флаг in
Причина в том, что я не особо обращал внимание на Restart=on-failure, а во-вторых, это файл журнала, который показывает мне случаи сбоя.
флаг in
Уф не сердце.... Извините миссис Инглиш.
флаг in
Не знаю о systemd.timer. Я хотел бы знать, почему это произошло со стандартной работой cron. Я не специалист по Linux. Мне нужно управлять им на «своем уровне». Который должен работать.
флаг ng
Добавьте `$$` к вашему сообщению, чтобы показать PID процесса, для отладки
Рейтинг:0
флаг cn

Я бы проверил пару вещей:

  1. Запущено ли два или более процессов cron? Вы можете проверить с помощью ps -ef|grep cron
  2. Есть ли в /etc/cron.d что-нибудь, что вызывает этот скрипт? Маловероятно, но проверить не помешает.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.