Я создал свой собственный сервис:
/usr/bin/mcp
/etc/init.d/skeleton
Измените верхнюю часть скрипта Bash:
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Runs my Service"
NAME=mcp
DAEMON=/usr/bin/$NAME
DAEMON_ARGS="-d f -c /etc/mcp"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
Кроме этого, скелет точно такой же.
Затем я создаю демон:
sudo update-rc.d -f mcp remove
sudo update-rc.d mcp defaults 97 03
Когда я запускаю программу вручную: mcp -d f -c /etc/mcp
, она работает, но никогда не возвращается, так как ее служба, которая предназначен, чтобы всегда бежать. Это нормально.
Но теперь, когда я запускаю его как сервис: sudo service mcp start
я вижу то же самое поведение. То есть как только я ввожу команду запуска службы, программа запускается, но теперь мой терминал застрял в ожидании программы.
Я думал, что если вы запускаете что-то в качестве службы, то это должно работать в фоновом режиме?
Также я не могу остановить эту службу, если я не открою второй терминал. Я вроде как хочу, чтобы при запуске службы она запускалась где-то в фоновом режиме, а затем вы возвращались в командную строку. Я что-то здесь не так делаю?
Не используйте init.d
сервис. Запишите Новомодное задание вместо этого. Вот пример . Выскочка будет заботиться о хранении программы в фоновом режиме, входе, и т.д.
, Ваш сервис был бы в /etc/init/mcp.conf
, содержа, например:
start on runlevel [2345]
stop on runlevel [016]
exec /usr/bin/mcp -d f -c /etc/mcp
Затем можно сделать:
sudo service mcp start
sudo service mcp stop
И так далее.