В документации monit я вижу, что есть команда проверки каталога, но я не вижу примеров того, как ее использовать, чтобы увидеть, существует ли каталог, и если это не создать каталог с помощью команды mkdir.
Это работает для меня:
check directory my_path path /mnt/some_mount_point
if does not exist then exec "/usr/local/bin/create_mnt.sh"
Это может вам помочь mkdir -p $directory
должен делать то, что хочешь. В -p
опция создаст все необходимые родительские каталоги. Если $directory
уже существует как каталог, команда ничего не делает и завершается успешно. Если $ directory является обычным файлом, он останется нетронутым, nd не завершится ошибкой, если каталог уже существует, поэтому вы можете сделать все это сразу с помощью:
mkdir -p / some / directory / вы / хотите / существовать / существовать || выход 1
Он в значительной степени есть у Алека, но для этого не нужно создавать скрипт. Вы можете запустить mkdir
напрямую (хотя обратите внимание, что вам нужен полный путь к нему):
check directory my_path path /mnt/some_mount_point
if does not exist then exec "/bin/mkdir /mnt/some_mount_point"
В зависимости от вашего пути может помочь добавление -p
переключитесь на mkdir, если вам нужны подпапки и / или подавление повторяющихся ошибок.
Не нужно создавать отдельный скрипт, нужно использовать bash
с участием -c
вариант:
check directory my_path path /some/path/to/dir
if does not exist then exec "/bin/bash -c 'mkdir -p /some/path/to/dir'"
as uid <some_user> and gid <some_group>
В monit
процесс запускается от пользователя root, поэтому убедитесь, что вы не создаете каталоги как root (предположительно, вам это не нужно), а затем вы можете убить monit
процесс и запустить его на переднем плане с помощью
monit -Ivv
и см. выходные примечания к отладке. Если ошибок нет, можно остановиться monit
на переднем плане с помощью C-c и запустите его как обычный процесс деамона.
Надеюсь это поможет.