В наших виртуалках CentOS и Debian с systemd тоже вроде отказывался запускаться через init.d - потому создали /usr/lib/systemd/system/activemq.service
Цитата:
[Unit]
Description=Apache ActiveMQ Daemon
After=network.target
Requires=
[Service]
Type=forking
ExecStart=/opt/activemq/apache-activemq-5.9.1/bin/linux-x86-64/activemq start
ExecStop=/opt/activemq/apache-activemq-5.9.1/bin/linux-x86-64/activemq stop
[Install]
WantedBy=multi-user.target
Потом systemctl enable activemq.service.
Биллинг bgbilling.service:
Цитата:
[Unit]
Description=BGBilling Server Daemon
After=network.target,mysql.service,activemq.service
Requires=mysql.service,activemq.service
[Service]
Type=forking
ExecStartPre=/opt/bgbilling/BGBillingServer/script/bgcommonrc checkmysql
ExecStart=/opt/bgbilling/BGBillingServer/script/bgbilling start
ExecStop=/opt/bgbilling/BGBillingServer/script/bgbilling stop
[Install]
WantedBy=multi-user.target
InetAccess:
Цитата:
[Unit]
Description=inet-access Daemon
After=network.target,mysql.service,activemq.service
Requires=mysql.service,activemq.service
[Service]
Type=forking
ExecStartPre=/opt/bgbilling/BGBillingServer/script/bgcommonrc checkmysql
ExecStart=/opt/bgbilling/inet/BGInetAccess/access.sh start
ExecStop=/opt/bgbilling/inet/BGInetAccess/access.sh stop
[Install]
WantedBy=multi-user.target
/opt/bgbilling/BGBillingServer/script/bgcommonrc checkmysql просто висит 30 секунд пока не получит соединение к БД (MariaDB вроде всё также запускается через init.d, потому при запуске виртуалки часто процесс биллинга начинал обращаться к БД до того как она запустилась).
Можно (нужно) еще и PIDFile указывать (nginx.service из пакета nginx):
Цитата:
[Unit]
Description=The nginx HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
Например,
Цитата:
...
[Service]
Type=forking
PIDFile=/opt/bgbilling/inet/BGInetAccess/.run/access.pid
...
Тогда при перезапуске через systemctl он будет нормально ждать ожидания остановки, иначе может быть ошибка "UDP порт уже занят", т.к. предыдущий процесс не успел полностью остановиться.