Не забудьте добавить ПУТЬ
в ваш сценарий и включить в него / sbin
. Поскольку сценарий init
не использует переменную среды PATH
для остальной системы, вам необходимо установить ее непосредственно в своем сценарии и убедиться, что / sbin
там, например, добавьте:
ПУТЬ = / sbin: / bin: / usr / sbin: / usr / bin
В начале вашего скрипта.
Выполните отладку сценария, чтобы убедиться, что демон start-stop-daemon правильно считывает путь к monit из переменной DAEMON
. Для этого добавьте следующую строку в начало вашего скрипта:
set -x #echo on
Все это будет выглядеть как
#! / Bin / sh {{ 1}} set -x #echo on
### BEGIN INIT INFO
# Provides: monit
# Required-Start: $ remote_fs
# Required-Stop : $ remote_fs
# Should-Start: $ all
# Should-Stop: $ all
# Default-Start: 2 3 4 5
# Default-Stop : 0 1 6
# Краткое описание: демон мониторинга служб и ресурсов
# Описание: monit - это утилита для управления и мониторинга
# процессов, программ, файлов, каталогов и файловых систем
# в системе Unix. Monit выполняет автоматическое обслуживание
# и восстановление и может выполнять значимые причинно-следственные действия
# в ошибочных ситуациях.
### END INIT INFO
set -e
ПУТЬ = / sbin: / остаток пути здесь.
Ваш скрипт.
Если DAEMON
поврежден, попробуйте заключить его в круглые скобки:
if start-stop-daemon --start --quiet --oknodo \
--pidfile $ PID - -exec $ ($ DAEMON) \
- $ MONIT_OPTS
Или просто добавьте путь к двоичному файлу напрямую.
if start-stop-daemon --start --quiet --oknodo \
--pidfile $ PID --exec / usr / bin / monit \
- $ MONIT_OPTS {{ 1}}
Если последний вариант не работает, убедитесь, что двоичный файл действительно существует. Если это так, вам нужно будет проверить, действительно ли start-stop-daemon разрешен доступ к нему. Посмотрите на chrooting.
Краткий ответ :ssh root@XXX -p 23
, где XXX
— публичный IP-адрес хоста. См. iptables -L -t nat
по причине.
Вот полное руководство о том, как туда добраться (Сервер Ubuntu 18.04 в качестве хоста, Debian buster в контейнере):
apt-get install debian-archive-keyring debootstrap systemd-container
debootstrap --include=systemd-container buster /var/lib/machines/debian
systemd-nspawn -D /var/lib/machines/debian systemctl enable systemd-networkd.service systemd-resolved.service
systemd-nspawn -D /var/lib/machines/debian apt-get install -y openssh-server
systemd-nspawn -D /var/lib/machines/debian mkdir /root/.ssh
Создайте /etc/systemd/nspawn/debian.nspawn
с помощью:
[Network]
Port=tcp:23:22
Затем продолжайте:
machinectl start debian
machinectl copy-to debian /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys
ssh -p 23 root@XXX
Теперь у вас должно быть SSH-подключение к контейнеру.
ssh root@localhost -p 23
не работает, так как привязка портов nspawn исключает замыкание на себя. Есть отчет об ошибке:https://github.com/systemd/systemd/issues/6106