Как обновить информацию о датчиках

Любое решение, использующее что-то вроде ps aux | grep abc или pgrep abc, ошибочно.

Почему?

Поскольку вы не проверяете, работает ли какой-либо конкретный процесс, вы проверяете если есть какие-либо процессы, которые выполняются в соответствии с abc. Любой пользователь может легко создать и запустить исполняемый файл с именем abc (или который содержит abc где-то в его имени или аргументах), вызывая ложное срабатывание для вашего теста. Существуют различные варианты, которые вы можете применить к ps, grep и pgrep для сужения поиска, но вы по-прежнему не получите надежного теста.

Итак, как я могу надежно проверить

Это зависит от того, что вам нужно для теста.

Я хочу убедиться, что служба abc запущена, а если нет, запустите ее

[d7 ] Это то, для чего предназначены init и upstart. Они запустит сервис и обеспечат его сохранение pidfile в pidfile. Попробуйте снова запустить службу (через init или upstart), и она проверит pidfile и начнет ее, если ее там нет, или прервется, если она уже запущена. Это все еще не на 100% надежнее, но оно как можно ближе.

См. Как проверить, проверяет ли мой игровой сервер ... для других решений.

[d10 ] abc - мой сценарий. Мне нужно убедиться, что работает только один экземпляр моего скрипта.

В этом случае используйте файл блокировки или lockdir. Например,

#!/usr/bin/env bash

if ! mkdir /tmp/abc.lock; then
    printf "Failed to acquire lock.\n" >&2
    exit 1
fi
trap 'rm -rf /tmp/abc.lock' EXIT  # remove the lockdir on exit

# rest of script ...

См. Как проверить, работает ли мой игровой сервер ... для других способов блокировки.

1
задан 1 February 2013 в 02:27

0 ответов

Другие вопросы по тегам:

Похожие вопросы: