Автозапуск собственного скрипта

Автор nikanofff, 07 мая 2015, 19:59:43

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

nikanofff

Доброго времени суток уважаемые форумчане. Столкнулся с такой проблемой (вопросом). В общем стоят у меня игровые сервера. Соответственно для их запуска требуется запустить скрипт (этого самого запуска). Содержимое его таково:

#!/bin/sh
while true
do
screen -AmS myserver1 ./srcds_run -console -game dod +map dod_anzio +hostport 27015 +clientport 27005 +maxplayers 32 -exec server.cfg
sleep 1
done


Так вот вопрос в том что как к примеру мне сделать так чтоб при старте системы он активировался (запускался) так же автоматически? Читал и про /etc/init.d и про другое, но так ничего и не понял. Если не трудно объясните мне порядок действий.


Т.е или этот же скрипт копировать в эту папку а в этом скрипте указывать полную директорию, или иной какой способ.

Спасибо за внимание

yoric

Можно прямо так как есть вписать в /etc/rc.local, или оформить в виде файла и вызов оттуда же.

nikanofff

Цитата: yoric от 07 мая 2015, 20:05:34Можно прямо так как есть вписать в /etc/rc.local, или оформить в виде файла и вызов оттуда же.


Я вам конечно премного благодарен. А можно подробнее?) Я только осваиваю Дебиан (линукс) и некоторые моменты мне ещё не понятны. Как нибудь можно указать что к примеру такой то кусок скрипта вписать сюда и будет стартовать. Или как нибудь для меня не наученного в этом плане объяснить?

yoric

Впишите имя этого скрипта в /etc/rc.local, лучше с полным путём.
/где/находится/скрипт/имя.скрипта
Например, /usr/local/bin/name.script
Перед exit 0

sandaksatru

Поскольку там while true
do
имхо лучше отделить его от консоли и перенаправить вывод в лог:
/где/находится/скрипт/имя.скрипта &>/var/log/имя_сервиса &

yoric

А, ну да, виноват, закорючку забыл в конце (&). Как минимум, для начала, потом видно будет.

315th

Вот этот совет
Цитата: yoric от 07 мая 2015, 20:05:34Можно прямо так как есть вписать в /etc/rc.local, или оформить в виде файла и вызов оттуда же.
из раздела вредных.
nikanofff, если хотите оформить запуск Ваших игровых серверов надлежащим образом смотрите файл /etc/init.d/skeleton, в котором описаны необходимые функции запуска и остановки. А ваш скрипт запуска отправьте куда подальше.
Debian GNU/Linux 7.11 (wheezy) - CLI
ICH7; D525MV; r8169; Linux 4.14.32-atomd525mv-imq-ja1 (i686); Intel Atom D525 1.8 GHz

nikanofff

Цитироватьnikanofff, если хотите оформить запуск Ваших игровых серверов надлежащим образом смотрите файл /etc/init.d/skeleton, в котором описаны необходимые функции запуска и остановки. А ваш скрипт запуска отправьте куда подальше.

Не совсем вас понял. Глянул этот /etc/init.d/skeleton Там как я понял описаны какие то функции запуска, остановки. Т.е каким то образом необходимо внести там "процесс запуска" моего скрипта, или же в этом файле полностью указать (в самом файле) все буковки из моего скрипта?

yoric

А как у Вас вообще прогресс? Через rc.local сделали? Ну и сойдёт для начала, тоже мне, бином Ньютона))

315th

Цитата: nikanofff от 10 мая 2015, 19:25:23Не совсем вас понял. Глянул этот /etc/init.d/skeleton Там как я понял описаны какие то функции запуска, остановки. Т.е каким то образом необходимо внести там "процесс запуска" моего скрипта, или же в этом файле полностью указать (в самом файле) все буковки из моего скрипта?
Вам нужно переписать скрипт таким образом чтобы он был работоспособным, соответствовал LSB, и не ломал систему. Если Вы посмотрите на другие скрипты запуска, поставляемые с пакетами из репазитария (ssh, apache, squid, etc...), то они состоят обычно из двух файлов:
1. /etc/default/scriptname
2. /etc/init.d/scriptname
В первом обычно указываются необходимые параметры запуска приложения, во втором функции.
Для примера простенький скрипт, использующий dtach (не прижился у меня screen, увы) написанный за 7 минут с колёс:
/etc/default/cs
csuser=root
game=dod
map=dod_anzio
sport=27015
cport=27005
maxplayers=32
cfg=/etc/cs/server.cfg

[свернуть]
/etc/init.d/cs
#!/bin/sh
### BEGIN INIT INFO
# Provides:          csdm
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Example initscript
# Description:       This file should be used to construct scripts to be
#                    placed in /etc/init.d.
### END INIT INFO

export PATH=/sbin:/usr/sbin:/bin:/usr/bin
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="gameserver"
NAME="cs"
BIN=/usr/bin/srcds_run
DAEMON=/usr/bin/dtach
SOCKET=/tmp/$NAME.dtach
PIDFILE=/var/run/$NAME.pid

[ -x "$BIN" ] || exit 0
. /lib/init/vars.sh
. /lib/lsb/init-functions

# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME || exit 0
DAEMON_ARGS="-console -game $game +map $map +hostport $sport +clientport $cport +maxplayers $maxplayers -exec $cfg"

cs_start(){
start-stop-daemon --start -q --name $NAME -o -c $user -u $user --pidfile $PIDFILE -Sx $DAEMON -- -n $SOCKET $BIN $DAEMON_ARGS
}

cs_stop(){
start-stop-daemon --stop --name $NAME --oknodo --pidfile $PIDFILE
}

case $1 in
start)
log_daemon_msg  "Starting $DESC: $NAME"
cs_start > /dev/null 2>&1
log_end_msg $?
;;
stop)
log_daemon_msg  "Stopping $DESC: $NAME"
cs_stop > /dev/null 2>&1
log_end_msg $?
;;
restart|reload)
log_daemon_msg "Restarting $DESC: $NAME"
cs_stop > /dev/null 2>&1
sleep 3
cs_start > /dev/null 2>&1
log_end_msg $?
;;
status)
    status_of_proc $BIN $NAME
    ;;
*)
echo "Usage: service `basename $0` {start|stop|restart|reload|status}" >&2
;;
esac

exit 0

[свернуть]
Еще раз повторю, это не есть готовое решение, это пример, вероятно вам потребуется отладка скрипта.
Документация:
https://wiki.debian.org/LSB
https://wiki.debian.org/LSBInitScripts
man update-rc.d
Debian GNU/Linux 7.11 (wheezy) - CLI
ICH7; D525MV; r8169; Linux 4.14.32-atomd525mv-imq-ja1 (i686); Intel Atom D525 1.8 GHz

nikanofff

Спасибо. буду пробовать себя "образовывать"

Shabow

Лично для себя решил проблему через cron.
старт скрипта после загрузки системы  - @reboot     /home/me/myscript.sh

LONER

Всем доброго времени суток! Чтобы не создавать новую тему с похожим названием, решил свой вопрос задать в этой.

Есть скрипт автозапуска XBT Tracker расположенный
/etc/init.d/xbt
сам скрипт выглядит таким образом
#!/bin/bash

XBT_PATH="/home/xbt/Tracker"
case "$1" in
start)
echo "Start XBT Tracker"
cd $XBT_PATH
./xbt_tracker --conf_file xbt_tracker.conf
echo $?
;;
stop)
echo "Stop XBT Tracker"
kill `cat /var/run/xbt_tracker.pid`
echo $?
;;
restart)
kill `cat /var/run/xbt_tracker.pid`
sleep 2
cd $XBT_PATH
./xbt_tracker --conf_file xbt_tracker.conf
;;
*)
echo "Usage: /etc/init.d/xbt {start|stop|restart}"
exit 1
;;
esac
exit 0

Чтобы он заработал надо его сделать исполняемым и поставить в автозапуск такими командами
chmod +x /etc/init.d/xbt
update-rc.d xbt defaults

теперь он будет автоматически запускаться после перезагрузки системы, так же им можно управлять такими командами
/etc/init.d/xbt start
/etc/init.d/xbt stop
/etc/init.d/xbt restart


Все это прекрасно работает для Debian 7.x
Но для Debian 8.x теми же командами скрипт не ставится в автозапуск, хотя вручную управляется нормально командами
/etc/init.d/xbt start
/etc/init.d/xbt stop
/etc/init.d/xbt restart


Каким образом поставить данный скрипт в автозапуск при перезагрузки системы в Debian 8.x, существуют какие-то подобные команды для 8-х версий?
Читал на различных форумах, как подобные скрипты ставятся в автозапуск на Debian 8.x, но что-то уж больно много лишних движений для этого приходится делать и не все до конца понятно, в итоге мне так и не удалось поставить его в автозапуск.
Заранее, всем кто откликнется и поможет разобраться, спасибо.

alsoijw

LONER, поменяли систему инициализации. Нужно создать systemd юнит, после чего
ЦитироватьВключить юнит в автозапуск при загрузке системы:
# systemctl enable юнит
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

LONER

Цитата: alsoijw от 23 апреля 2016, 20:23:36Нужно создать systemd юнит
Вот в этом-то и проблема. У меня дружба с этим не ладится.
Цитата: alsoijw от 23 апреля 2016, 20:23:36поменяли систему инициализации
А для чего создавать такие сложности? Ведь и так все прекрасно работало. Приходилось выполнить всего две простеньких команды и автозапуск работал, зато теперь так все мудрено на мой взгляд, только из-за systemd все ни как не решаюсь перейти на 8-ю версию.