linux命令-服务自动启动
centOS6
Linux下配置某个服务的开机自启动,分为两种情况:一种是已经挂载的,另一种是未挂载的。已经挂载的程序可以使用 chkconfig命令
查到运行等级,如httpd服务
执行命令:
chkconfig --list |grep httpd
打印信息:
httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
未挂载的程序,不会打印任何信息,如Tomcat
执行chkconfig --list |grep tomcat
,没有打印任何信息
已挂载程序开机自启动
以httpd服务举例,在root用户下打开一个终端。执行命令:
chkconfig --list |grep httpd
可以看到0~6都是off。
执行命令:
chkcongfig httpd on
执行命令:
chkconfig --list |grep httpd
执行完chkcongfig httpd on后,2~5对应的值变成了on.
此时我们通过service httpd status 查看http服务状态,是stopped状态,没有开机自启动,此时我们重启Linux电脑,再来查看httpd服务 是否开机启动:
service httpd status
可以看到httpd服务已经启动
LINUX运行等级
执行chkcongfig httpd on
可以加–level参数,指定将0~6哪些级别开启,命令格式如下:
# chkcongfig --level 345 httpd on
345就是需要开启(由off变成on)的数字,而不加—level参数时,默认打开的是2~5
0~6对应的运行级别如下:
Linux系统有7个运行级别(runlevel)
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(没有NFS)
运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:X11控制台,登陆后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
未挂载程序开机自启动
未挂载的程序开机自启动实现方式是编写程序启动的.sh脚本,再将此脚本挂载到Linux系统上,让它开机执行,启动程序。
实现方式有两种:简易版和完全版
简易版
以Tomcat服务为例,步骤如下:
- 编写脚本start.sh
位置为/app/start.sh, 可自定义脚本位置和脚本名字,此处的app只是作者在根目录下自建的一个文件夹。 脚本内容为:#!/bin/bash export JDK_HOME=/app/jdk1.7.0_71 export JAVA_HOME=/app/jdk1.7.0_71 /app/bim/apache-tomcat-7.0.63/bin/startup.sh
- 给脚本赋执行权限。
chmod +x /app/start.sh
- 给/etc/rc.d/rc.local文件赋执行权限
chmod +x /etc/rc.d/rc.local
- 打开/etc/rc.d/rc.local文件,在最后加上如下脚本:
/app/start.sh
- 重启服务器后,使用命令查看tomcat是否自动启动。
ps -ef |grep tomcat
完全版
- 编写shell脚本
在/etc/init.d下新建一个文件tomcat,打开,添加如下内容: ``` #!/bin/shTomcat auto-start
RETVAL=0 export JAVA_HOME=/app/jdk1.7.0_71 export JRE_HOME=/app/jdk1.7.0_71/jre export CATALINA_HOME=/app/bim/apache-tomcat-7.0.63 export CATALINA_BASE=/app/bim/apache-tomcat-7.0.63 start() { if [ -f $CATALINA_HOME/bin/startup.sh ]; then echo $”Starting Tomcat” $CATALINA_HOME/bin/startup.sh RETVAL=$? echo “ OK” return $RETVAL fi } stop() { if [ -f $CATALINA_HOME/bin/shutdown.sh ]; then echo $”Stopping Tomcat” $CATALINA_HOME/bin/shutdown.sh RETVAL=$? sleep 1 ps -fwwu root | grep tomcat|grep -v grep | grep -v PID | awk ‘{print $2}’|xargs kill -9 echo “ OK” # [ $RETVAL -eq 0 ] && rm -f /var/lock/… return $RETVAL fi }
case “$1” in
start)
start
;;
stop)
stop
;;
restart) echo $”Restaring Tomcat” $0 stop sleep 1 $0 start ;; *) echo $”Usage: $0 {start|stop|restart}” exit 1 ;; esac exit $RETVAL
* 给脚本增加可执行权限
chmod +x /etc/init.d/tomcat
* 挂载,执行命令:
ln -s /etc/init.d/tomcat /etc/rc2.d/S16Tomcat
* 设置开机自启动,执行命令
chkconfig –add tomcat
此时我们使用`chkconfig --list |grep tomcat`命令,可以发现Tomcat加入了chkconfig,也就能通过修改其运行等级来实现开机
启动与否。而且Tomcat可以使用service tomcat start/stop/restart命令进行开启/关闭/重启。
重启电脑,验证Tomcat是否开机重启。
### CentOS7
centos 7以上是用Systemd进行系统初始化的,Systemd 是 Linux 系统中最新的初始化系统(init),它主要的设计目标是克服 sysvinit
固有的缺点,提高系统的启动速度。
Systemd服务文件以.service结尾,比如现在要建立nginx为开机启动,如果用yum install命令安装的,yum命令会自动创建nginx.service
文件,直接用命令。
systemctl enable nginx.service
设置开机启动即可。
如果是用源码编译安装的,要手动创建nginx.service服务文件。
* 创建服务文件
在系统服务目录`/lib/systemd/system/`里创建nginx.service文件。内容如下:
[Unit] Description=nginx After=network.target
[Service] Type=forking ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s quit PrivateTmp=true
[Install] WantedBy=multi-user.target
Unit:服务的说明
Description:描述服务
After:描述服务类别
Service:服务运行参数的设置
Type=forking:后台运行的形式
ExecStart:服务的具体运行命令
ExecReload:重启命令,可选
ExecStop:停止命令 ,可选
PrivateTmp=True表示给服务分配独立的临时空间
注意:Service的启动、重启、停止命令全部要求使用绝对路径
Install运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3
* 设置开机启动
systemctl enable nginx.service
* 重启配置
systemctl daemon-reload
* 重启系统后查看程序是否启动。
如果没有成功,可以使用journalctl命令查看日志。
journalctl -xe
#### tomcat自动启动
1. 在/lib/systemd/system下创建service
vi tomcat.service
1. 添加如下内容:
[Unit] Description=Tomcat After=network.target After=syslog.target
[Service] User=myuser #指定启动用户,默认为root Group=myuser #指定用户组
Type=forking PIDFile=/home/web/apache-tomcat-8.5.42/tomcat.pid ExecStart=/home/apache-tomcat-8.5.35/bin/catalina.sh start ExecReload=/home/apache-tomcat-8.5.35/bin/catalina.sh restart ExecStop=/home/apache-tomcat-8.5.35/bin/catalina.sh stop
[Install] WantedBy=multi-user.target
1. 配置catalina.sh
其中PIDFile需要tomcat catalina.sh中配置CATALINA_PID选项,PID路径需要tomcat用户有读写权限。
CATALINA_PID= /home/web/apache-tomcat-8.5.42/tomcat.pid
1. 设置java_home
catalina.sh会调用setclasspath.sh,在setclasspath.sh中设置JRE_HOME,否则启动会报找不到java_home的错误。
export JAVA_HOME=/usr/lib/java/jdk1.8.0_202 export JRE_HOME=/usr/lib/java/jdk1.8.0_202/jre export CATALINA_BASE=/home/web/apache-tomcat-8.5.42
1. 启用service:
systemctl enable tomcat.service
1. 重新加载服务配置
systemctl daemon-reload
#### JAR自动启动
1. 对jar执行文件添加启动脚本start.sh如下:
#!/bin/sh
添加java执行路径
export JAVA_HOME=/usr/lib/java/jdk1.8.0_202
export PATH=$JAVA_HOME/bin:$PATH
cd dirname $0
nohup java -jar xxx.jar > service.log 2>&1 &
echo $! > /var/run/xxx.pid
其中cd `dirname $0`标识cd到该脚本所在的路径,如果jar执行依赖相对路径下的一些配置,那么就需要执行此命令。
1. 对jar执行文件添加关闭脚本stop.sh如下:
#!/bin/sh PID=$(cat /var/run/xxx.pid) kill -9 $PID
1. 在/lib/systemd/system下创建service
vi xxx.service
1. 添加如下内容:
[Unit] Description=xxx After=network.target After=syslog.target
[Service] User=myuser #指定启动用户,默认为root Group=myuser #指定用户组
Type=forking ExecStart=/home/xxx/start.sh ExecStop=/home/xxx/stop.sh
[Install] WantedBy=multi-user.target
service的另一种配置方法,不需要编写sh脚本:利用systemd对jar的支持,直接配置jar包执行,systemd会自动管理pid,和重启restart,
关闭stop等。service中需要配置**绝对路径,相对路径会报错**。143是jar包执行成功返回的code。
[Unit] Description=question-8082 After=syslog.target After=network.target
[Service] User=root
ExecStart=/usr/bin/java -jar /root/question-8082.jar SuccessExitStatus=143
[Install] WantedBy=multi-user.target
1. 启用service:
systemctl enable xxx.service
1. 重新加载服务配置
systemctl daemon-reload
#### redis自动启动
1. 在/lib/systemd/system下创建service
vi redis.service
1. 添加如下内容:
[Unit] Description=redis After=network.target After=syslog.target
[Service] User=myuser #指定启动用户,默认为root Group=myuser #指定用户组
Type=forking
ExecStart=/usr/lib/redis/bin/redis-server /usr/lib/redis/etc/redis.conf
ExecStop=kill -INT cat /tmp/redis.pid
[Install] WantedBy=multi-user.target
1. 启用service:
systemctl enable redis.service
1. 重新加载服务配置
systemctl daemon-reload
#### nginx自动启动
1. 在/lib/systemd/system下创建service
vi nginx.service
1. 添加如下内容:
[Unit] Description=nginx After=network.target After=syslog.target
[Service] Type=forking ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s quit
[Install] WantedBy=multi-user.target
1. 启用service:
systemctl enable nginx.service
1. 重新加载服务配置
systemctl daemon-reload ```