Почему мой сценарий init.d отображается в --status-all, но я не могу его контролировать?

Я получаю следующий (усеченный) вывод из --status-all

$ service --status-all
 [..]
 [ - ]  ossec
 [ - ]  ossec-hids-authd
 [..]

Но я не могу получить к нему доступ через service:

$ service status ossec-hids-authd
status: unrecognized service

Мой скрипт init.d выглядит так:

#!/bin/sh -e
#### BEGIN INIT INFO
# Provides:          ossec-authd
# Required-Start:    $network $local_fs $remote_fs
# Required-Stop:     $network $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Authentication Daemon for OSSEC-HIDS.
# Description:       Provides key signing for OSSEC Clients
### END INIT INFO
NAME=ossec-authd
DAEMON=/var/ossec/bin/ossec-authd
DAEMON_ARGS="-p 1515 2>&1 >> /var/ossec/logs/ossec-authd.log &"
PIDFILE=/var/run/ossec-authd.pid

test -x ${DAEMON} || exit 5

case $1 in
 start)
  if [ -e $PIDFILE ]; then
   status_of_proc -p $PIDFILE $DAEMON "$NAME process" && status="0" || status="$?"
   if [ $status = "0" ]; then
    exit
   fi
  fi
  log_daemon_msg "Starting the process" "$NAME"
  if start-stop-daemon --start --quiet --oknodo --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS; then
   log_end_msg 0
  else
   log_end_msg 1
  fi
  ;;
 stop)
  if [ -e $PIDFILE ]; then
   status_of_proc -p $PIDFILE $DAEMON "Stoppping the $NAME process" && status="0" || status="$?"
   if [ "$status" = 0 ]; then
    start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE
    /bin/rm -rf $PIDFILE
   fi
  else
   log_daemon_msg "$NAME process is not running"
   log_end_msg 0
  fi
  ;;
 restart)
  $0 stop && sleep 2 && $0 start
  ;;
 status)
  if [ -e $PIDFILE ]; then
   status_of_proc -p $PIDFILE $DAEMON "$NAME process" && exit 0 || exit $?
  else
   log_daemon_msg "$NAME Process is not running"
   log_end_msg 0
  fi
  ;;
 reload)
  if [ -e $PIDFILE ]; then
   start-stop-daemon --stop --signal USR1 --quiet --pidfile $PIDFILE --name $NAME -- $DAEMON_ARGS
   log_success_msg "$NAME process reloaded successfully"
  else
   log_failure_msg "$PIDFILE does not exists"
  fi
  ;;
 *)
  echo "Usage: $0 {start|stop|restart|reload|status}"
  exit 2
  ;;
esac

Что я сделал не так?

2 ответа

Решение

А теперь Ubuntu ответ.

Вам удалось избежать ненужного ужаса ossec-control, Но на Ubuntu Linux эта система 5 rc скрипт сам по себе ненужный ужас.

Вы используете Ubuntu Linux. У вас уже есть выскочка или systemd. Не начинайте с написания Системы 5 rc скрипты.

Systemd

В https://unix.stackexchange.com/a/200365/5132 я показал простой сервисный модуль шаблонов systemd, который может запускать целую кучу сервисов OSSEC HIDS в качестве экземпляров шаблонов. К сожалению, это не работает с ossec-authd по той простой причине, что это не имеет -f вариант, как и другие программы. По иронии судьбы, это потому, что у него нет ненужного (еще раз) кода для двойного разветвления, который есть у других программ, и что они должны быть отключены с помощью -f вариант.

Итак, вот еще один шаблон, чтобы сохранить как /etc/systemd/system/ossec-f@.service,

[Единица измерения]
Описание = Сервер OSSEC HIDS %i
После того, как = network.target 

[Обслуживание]
Тип = простой
ExecStartPre = / usr / bin / env / var / ossec / bin / ossec-% i -t
ExecStart = / usr / bin / env / var / ossec / bin / ossec-% i

[Установить]
WantedBy=multi-user.target

Этот шаблон должен быть реализован в реальной службе как ossec-f@authd.service и доступны стандартные средства управления systemd:

  • systemctl enable ossec-f@authd.service установить службу на автозапуск при загрузке.
  • systemctl start ossec-f@authd.service чтобы начать службу сейчас.
  • systemctl status ossec-f@authd.service чтобы увидеть статус сервиса.

Команда для просмотра сервисных статусов

 systemctl 
или же

 systemctl - все 
чтобы увидеть все загруженные юниты, даже неактивные.

выскочка

Я никогда не нуждался в OSSEC HIDS при выскочке, это всего лишь скелет /etc/init/ossec-authd.conf что вам придется работать над.

описание "OSSEC HIDS authd server"

начать на уровне выполнения [2345]
остановитесь на уровне выполнения [!2345]

респаун

exec /var/ossec/bin/ossec-authd

дальнейшее чтение

Это похоже на service --status-all будет перечислять все по имени файла и что мой скрипт init.d как-то не работает.

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