- Centos7开机第一个程序从init完全换成了systemd这种启动方式,同centos 5 6已经是实质差别。systemd是靠管理unit的方式来控制开机服务,开机级别等功能。
- 在/usr/lib/systemd/system目录下包含了各种unit文件,有service后缀的服务unit,有target后缀的开机级别unit等,这里临时介绍关于service后缀的文件。因为systemd在开机要想执行自启动,都是通过这些*.service 的unit控制的
具体流程
- 在/usr/lib/systemd/system目录下新建一个 service-name.service的文件
- 以apache的httpd.service的unit为例解释
- [Unit]
- #定义描述
- Description=The Apache HTTP Server
- #指定了在systemd在执行完那些target之后再启动该服务
- After=network.target remote-fs.target nss-lookup.target
- [Service]
- #定义Service 的运行type,一般是forking,就是后台运行
- Type=notify
- Environment=LANG=C
- #以下定义systemctl start |stop |reload *.service 的每个执行方法,具体命令#需要写绝对路径
- ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
- ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
- # Send SIGWINCH for graceful stop
- KillSignal=SIGWINCH
- KillMode=mixed
- #创建私有的内存临时空间
- PrivateTmp=true
- [Install]
- WantedBy=multi-user.target
以下是我自己写的一个java项目,需要他开机自运行的service,systemd会帮我执行我写脚本,shell如下,仅供参考
- #!/bin/bash
- CMD=$1
- case $CMD in
- -start)
- nohup java -jar /home/mobileoa/apps/shMediaManage-0.0.1.jar &> /home/mobileoa/apps/shm.log &
- ;;
- -stop)
- port=$(sudo netstat -tnlp | grep ‘:9099‘ |awk ‘{print $nf}’ |awk -f’/’ ‘{print $1}’)
- sudo kill $port
- ;;
- -restart)
- port=$(sudo netstat -tnlp | grep ‘:9099‘ |awk ‘{print $nf}’ |awk -f’/’ ‘{print $1}’)
- sudo kill $port
- nohup java -jar /home/mobileoa/apps/shMediaManage-0.0.1.jar &> /home/mobileoa/apps/shm.log &
- ;;
- *)
- echo “Usage: shMediaManager.sh -start | -stop | -restart .Or use systemctl start | stop | restart MediaManager.service “
- ;;
- esac
编辑.service文件,在Exec*下执行脚本,来启动关闭重启服务
- [UNIT]
- Description=Media wanager Service
- After=network.target
- [Service]
- Type=forking
- **ExecStart=/home/mobileoa/apps/shMediaManager.sh -start
- ExecReload=/home/mobileoa/apps/shMediaManager.sh -restart
- ExecStop=/home/mobileoa/apps/shMediaManager.sh -stop**
- PrivateTmp=True
- [Install]
- WantedBy=multi-user.target
设置开机自起
systemctl enable MediaManager.service
会创建一个连接