Почему не просто:
daemon --user mruser ${CONQ_DIR}/dgate -v
?
Править:
cd ${CONQ_DIR} && daemon --user mruser ./dgate -v &
Did you check the init scripts for nfs already? I'd suspect that they are creating a pid file and sticking it somewhere for future restart or stop operations. If not, it should be pretty simple to modify them to do so.
As far as checking the mount goes, take a look at section 4.3.1 at http://nfs.sourceforge.net/nfs-howto/ar01s04.html#mounting_remote_dirs . If you mount it with the 'soft' option you will get behavior that lets you monitor it, but this should not be used for the actual mount. Perhaps you want a second mount just for monitoring?
Что касается «зависания» процесса Monit во время сбоев сервера NFS, это можно обойти двумя способами.
жестко
на мягко
, что приводит к тому, что уровень NFS выдает ошибку ввода-вывода для обращающегося приложения после повторной передачи
повторные попытки. Поскольку это может вызвать другие проблемы, связанные с целостностью данных (ваши пишущие приложения должны уметь справляться с ошибками ввода-вывода или, по крайней мере, выходить чисто, не повреждая записанный файл), вы также можете попробовать : Надеюсь, это поможет!
Общий подход будет (при условии, что ни одно из встроенных правил Monit не применимо)
Позвольте Monit протестировать эти сценарии (пример взят из официальной документации ):
проверьте программу myscript по пути "/ usr / local /bin/myscript.sh "
если status! = 0, то предупреждение
For the specific problem, this could mean
Server: It probably depends on your OS, linux distro, NFS 3 or 4 etc, but it should be easy to figure out. E.g. on Ubuntu 12.04, I would test whether NFS server is running via
$ service portmap status
$ service nfs-kernel-server status
Create a shell script returning 0 if both commands return 'running'.
Client: To check whether a certain NFS share is currently mounted, I mostly use df -h. So the corresponding shell script would look like
#! /bin/bash
df -h | grep -q thesharename
Я хотел ответить на claasz , но у меня нет достаточно очков репутации. Идея использования внешнего сценария очень хороша, потому что он обеспечивает гибкость, и предложение использовать portmap или rpcinfo для проверки доступности сервера nfs довольно разумно.
Я нашел сценарий на Github от Thibaut Madelaine ], который, я думаю, должен быть интересен многим, кто сталкивается с той же проблемой. Он использует rpcinfo, как это rpcinfo -u 123.456.789.12 nfs 3
, где 123.456.789.12 - это IP-адрес вашего nfs-сервера.
Если все в порядке, ответ будет примерно таким же, как программа 100003 версии 3 готова и ждет
, а в случае сбоя 123.456.789.12: RPC: Программа не зарегистрирована
. Конечно, ответ может отличаться в зависимости от вашей системы.
Создайте сценарий под названием test-mount.sh для проверки монтирования. Я использую создание и удаление файлов, так как считаю ненадежным просто чтение файла.
set -e
/bin/touch /my-mounted-dir/test/mount.test
/bin/rm /my-mounted-dir/test/mount.test
exit 0
Создать тест в конфигурации мониторинга. Это запустит test-mount.sh, и в случае неудачи запустит remount-data.sh. Вы можете заменить его на все, что хотите сделать в случае неудачного монтирования.
check program test-mount with path /root/test-mount.sh timeout 5 seconds
if status != 0 then exec "/root/remount-data.sh"