Автор Тема: Создание стартовых скриптов  (Прочитано 6452 раз)

Оффлайн mad_max

  • Участник
  • *
  • Сообщений: 352
Задался задачей запуска сервера TeamSpeak2.
Так как в репозитории такового нет, скачал с сайта разработчиков
ts2_server_rc2_202319.tar.bz2

По мимо конфигов в нем есть бинарный файл - server-linux,
и стартовый скрипт - teamspeak2-server_startscript.

В системе создал юзера teamspeak, запретил ему вход в систему usermod
-s /bin/false teamspeak

Подскажите, как теперь добавить в автозагрузку стартовый скрипт. То есть как
добавить его я знаю chkconfig --add, а вот как правильно написать
стартовый скрипт нет.
Создал скрипт по шаблону:

#!/bin/sh
#
# Init file for teampeak service
#
# chkconfig: 345 91 19
# description:  teampeak service
# processname: teamspeakd
# config: /home/teamspeak/tss2_rc2/server.ini
# pidfile: /var/run/teamspeak/teamspeak.pid

# Do not load RH compatibility interface.
WITHOUT_RC_COMPAT=1

# Source function library.
. /etc/init.d/functions

PIDFILE=/var/run/teamspeak/teamspeak.pid
LOCKFILE=/var/lock/subsys/teamspeak
PROCESSNAME=teamspeakd
RETVAL=0

start()
{
        get_status >/dev/null
        if [ $RETVAL -eq 1 ]; then
                echo "Removing stale pidfile"
                rm -f "$PIDFILE"
        fi
        start_daemon --pidfile "$PIDFILE" --lockfile "$LOCKFILE"
--expect-user teamspeak -- teamspeak2
        RETVAL=$?
        return $RETVAL
}

stop()
{
        stop_daemon --pidfile "$PIDFILE" --lockfile "$LOCKFILE" --expect-user
teamspeak -- teamspeak2
        RETVAL=$?
        return $RETVAL
}

restart()
{
        stop
        sleep 2
        start
}

reload()
{
        msg_reloading template
        stop_daemon --pidfile "$PIDFILE" --expect-user teamspeak -HUP --
teamspeak2
        RETVAL=$?
        return $RETVAL
}

get_status()
{
        status --pidfile "$PIDFILE" --expect-user teamspeak -- teamspeak2
        RETVAL=$?
}

# See how we were called.
case "$1" in
        start)
                start
                ;;
        stop)
                stop
                ;;
        reload)
                reload
                ;;
        restart)
                restart
                ;;
        condstop)
                if [ -e "$LOCKFILE" ]; then
                        stop
                fi
                ;;
        condrestart)
                if [ -e "$LOCKFILE" ]; then
                        restart
                fi
                ;;
        condreload)
                if [ -e "$LOCKFILE" ]; then
                        reload
                fi
                ;;
        status)
                get_status
                ;;
        *)
                msg_usage "${0##*/}
{start|stop|reload|restart|condstop|condrestart|condreload|status}"
                RETVAL=1
esac

exit $RETVAL

Тут teamspeak2, как я понимаю, ищется в /bin ?
Исходя из этого я создал симлинк на скрипт запуска
/home/teamspeak/tss2_rc2/teamspeak2-server_startscript

При попытке запустить получаю:
# service teamspeak2 start
Starting teamspeak2 service: Error starting daemon. Aborted
 
    [FAILED]

Подскажите, где ошибки, и где почитать о создании и синтаксисе
стартовых скриптов?

Drool

  • Гость
Re: Создание стартовых скриптов
« Ответ #1 : 26.08.2009 20:17:20 »
Посмотрите мой пакет ichatsrvd - там в спеке увидите как создается псевдоюзер, от имени которого работает сервис (если ему права рута не нужны) и как организован init-скрипт. Почему ichatsrvd - потому-что там очень простой и наглядный скрипт.

Оффлайн mad_max

  • Участник
  • *
  • Сообщений: 352
Re: Создание стартовых скриптов
« Ответ #2 : 27.08.2009 06:38:21 »
Поясните пожалуйста следующее:
# processname: ichatsrvd.bin - это имя которое будет отображаться в процессах и ничего более?

start_daemon --pidfile "$PIDFILE" --lockfile "$LOCKFILE" --user teamspeak --expect-user teamspeak - как понимаю --expect-user teamspeak это от имени какого пользователя запускается, а вот что первое значит --user teamspeak?

Скрипт добавил, работает, но вот статутс не показывается:

# service teamspeak2 start
Starting server_linux service:                                          [ DONE ]
# service teamspeak2 status
server_linux is stopped

Полный листинг такой:

#!/bin/sh
#
# template Summary of the service.
#
# chkconfig: 345 91 19
# description: teampeak service
# processname: teamspeak2d
# config: /home/teamspeak/tss2_rc2/server.ini
# pidfile: /var/run/teamspeak/teamspeak.pid

# Source function library.
. /etc/init.d/functions

PIDFILE=/var/run/teamspeak/teamspeak.pid
LOCKFILE=/var/lock/subsys/teamspeak
CHECKTIME=60

# See how we were called.
case "$1" in
  start)
# Start daemon.
        start_daemon --pidfile "$PIDFILE" --lockfile "$LOCKFILE" --user teamspeak --expect-user teamspeak  -- /home/teamspeak/tss2_rc2/server_linux || failure
;;
  stop)
# Stop daemon.
echo -n "Shutting down teamspeak2d: "
stop_daemon --pidfile "$PIDFILE" --lockfile "$LOCKFILE" --expect-user teamspeak -- /home/teamspeak/tss2_rc2/server_linux || failure
;;
  restart)
$0 stop
$0 start
;;
  condrestart)
        if [ -e "$LOCKFILE" ]; then
$0 restart
fi
;;
  status)
        status --pidfile "$PIDFILE" --expect-user teamspeak --name server_linux -- /home/teamspeak/tss2_rc2/server_linux
;;
  *)
echo "Usage: teamspeak2d {start|stop|restart|condrestart|status}"
exit 1
esac

exit 0

Drool

  • Гость
Re: Создание стартовых скриптов
« Ответ #3 : 27.08.2009 22:34:13 »
А пид-файл создается?

Оффлайн mad_max

  • Участник
  • *
  • Сообщений: 352
Re: Создание стартовых скриптов
« Ответ #4 : 28.08.2009 05:55:18 »
А пид-файл создается?

Нет
Думал из-за нехватки прав. Сделал так:
PIDFILE=/home/teamspeak/var/teamspeak.pid
LOCKFILE=/home/teamspeak/var/teamspeak

Локфайл создаётся, а пид нет.

Drool

  • Гость
Re: Создание стартовых скриптов
« Ответ #5 : 28.08.2009 17:48:11 »
Локфайл создаётся, а пид нет.

Ну, значит софтина может не уметь его создавать. Тогда проверять не по пиду, а по лок-файлу. И не забывать при стопе его удалять. А пид-файл можно пробовать руками создавать, вроде в инит-скрипте от ddclient так сделано.