Background
- 这里记录方便自己以后查阅。
- 配置开机启动的方法有三种:1、配置
/etc/rc.local
或/etc/rc.d/rc.local
;2、配置/etc/rc.d/init.d
;3、配置/usr/lib/systemd/system
,添加自定义系统服务。
- 这里给出第一种,以jar包服务为例;第三种方法,以mysql、redis、emqx、rabbitmq 服务为例。
第一种
- 这种适合Java程序开机启动配置,结合我开发的jar包操作脚本
operate.sh
非常方便。
- 脚本在这里奉上:【jar包服务操作】【配置 web 界面监控服务运行】【shell脚本】
- 我们可以这么配置
- 首先给文件赋权
chmod +x /etc/rc.local
- 然后添加一个需要开机启动的服务脚本
boot-auto-run.sh
,你可以把它放在你自定义的位置,内容格式如下:
cd /root/projects/170-tower-lift/170-tower-lift-server/
sh operate.sh run
- 最后配置开机运行这个脚本
boot-auto-run.sh
就行了,如果以后有其他服务,也同样放到这个脚本里就行了
tee -a /etc/rc.local <<-'EOF'
# auto run on boot
/usr/wlf/boot-auto-run.sh
EOF
第二种
第三种
配置文件语法
[Unit]:服务的说明
Description:描述服务
After:描述服务类别
[Service]服务运行参数的设置
Type=forking是后台运行的形式
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:启动、重启、停止命令全部要求使用绝对路径
[Install]服务安装的相关设置,可设置为多用户
1、 mysql
vim /usr/lib/systemd/system/mysql.service
[Unit]
Description=mysql
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/opt/mysql-5.7.25/support-files/mysql.server start
[Install]
WantedBy=multi-user.target
systemctl enable mysql.service
2、 redis
vim /usr/lib/systemd/system/redis.service
[Unit]
Description=redis
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/redis/bin/redis-operator.sh start
ExecStop=/usr/redis/bin/redis-operator.sh stop
[Install]
WantedBy=multi-user.target
systemctl enable redis.service
- redis-operator.sh,这个脚本是自己写的
operate=$1
ps_1='./redis-server'
pid_1=`ps -ef | egrep "$ps_1" | egrep -v grep | awk '{print $2}'`
dir_home=/usr/redis/
dir_log=/usr/redis/redis-server.log
if [[ -z $operate || $operate = "help" ]]; then
echo '#####'
echo "please input your operate [run|stop|status|log|shell]"
echo '#####'
fi
if [[ $operate = "run" || $operate = "start" ]]; then
rm -rf $dir_log
nohup $dir_home/bin/redis-server $dir_home/redis.conf >> $dir_log 2>&1 &
elif [[ $operate = "stop" ]]; then
kill -9 $pid_1
elif [[ $operate = "status" ]]; then
if [[ $pid_1 ]]; then
echo -e "\033[43;34m RUNNING \033[0m"
else
echo -e "\033[44;30m STOPPED \033[0m"
fi
elif [[ $operate = "log" ]]; then
if [[ -e $dir_log ]]; then
tail -f $dir_log
else
echo '#####'
echo "No logs have been generated so far"
echo '#####'
fi
elif [[ $operate = "shell" ]]; then
if [[ $pid_1 ]]; then
$dir_home/bin/redis-cli -h localhost -p 6377 -a cloudansys[redis]
else
echo '#####'
echo "The redis service has not been started yet"
echo '#####'
fi
fi
3、 emqx
vim /usr/lib/systemd/system/emqx.service
[Unit]
Description=emqx
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
Environment=HOME=/var/lib/emqx
ExecStart=/usr/bin/emqx start
[Install]
WantedBy=multi-user.target
systemctl enable emqx.service
4、 rabbitmq
vim /usr/lib/systemd/system/rabbitmq.service
[Unit]
Description=rabbitmq
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/local/rabbitmq/sbin/rabbitmq-server -detached
ExecStop=/usr/local/rabbitmq/sbin/rabbitmqctl stop
[Install]
WantedBy=multi-user.target
- 修改启动脚本,在rabbitmq-server脚本中在
NOTIFY_SOCKET = \
这一行下面加入如下内容
ERLANG_HOME=/usr/local/erlang
export PATH=$PATH:$ERLANG_HOME/bin
export HOME=/usr/local/rabbitmq/
systemctl enable rabbitmq.service
5、OpenTSDB
vim /usr/lib/systemd/system/opentsdb.service
[Unit]
Description=OpenTSDB Service
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/share/opentsdb/etc/init.d/opentsdb start
ExecStop=/usr/share/opentsdb/etc/init.d/opentsdb stop
Restart=on-abort
[Install]
WantedBy=multi-user.target
systemctl enable opentsdb.service
6、查看所有已启动的服务
systemctl list-units --type=service