第十七章:第44节Linux 进程服务管理

更新于:2019-09-29 22:20:28

我们安装了那么多软件,每次启动还需要去安装目录执行文件,比如重启mysql服务:

/usr/local/mysql/support-files/mysql.server start

简化一点,在某一命令目录放一软连接


1.png


通常我们不这样做,建软连接也是建在“/etc/init.d”目录里。为什么建在这个目录里?

init.d目录包含许多系统各种服务的启动和停止脚本。

我们可以使用两个命令:systemctl和service操作这些服务。


1)添加服务


1.png


看上图,在“/etc/init.d/”目录还没有建立软连接时,使用service命令无法操作mysql。建完软连接,service命令可以操作mysql了。


注意:“mysqld”是为mysql服务进程的名字。大家也会注意到,好多服务,进程名字起名方法是“服务名+d”。例如memcache服务的进程名是“memcached”,ssh协议的进程名是“sshd”。


service --status-all


1.png


查看service可以操作的服务及当前状态。“+”表示已启动,“-”表示已停止,“?”表示没有状态的。这个服务列表与“/etc/init.d”目录里的文件名称一一对应。


2)操作服务


大部分的服务操作为(在root权限下):


①使用service命令:

service 服务名 start   传递参数start
service 服务名 stop   传递参数为stop
service 服务名 restart  传递参数为restart
service 服务名 status  传递参数为status
service --status-all    显示所有服务的状态
service 服务名 status   查看单个服务的状态

例如,我们重启ssh

service ssh restart


②直接运行

/etc/init.d/服务名 start   传递参数start
/etc/init.d/服务名 stop   传递参数为stop
/etc/init.d/服务名 restart  传递参数为restart


③使用systemctl命令:


syetemclt就是service和chkconfig这两个命令的整合。

任务旧指令新指令
使某服务自动启动chkconfig --level 3 服务名 onsystemctl enable 服务名
使某服务不自动启动chkconfig --level 3 服务名 offsystemctl disable 服务名
检查服务状态service 服务名 status

systemctl status 服务名 (服务详细信息)

systemctl is-active 服务名 (仅显示是否 Active)

显示所有已启动的服务chkconfig --listsystemctl list-units --type=service
启动某服务service 服务名 startsystemctl start 服务名
停止某服务service 服务名 stopsystemctl stop 服务名
重启某服务service 服务名 restartsystemctl restart 服务名


3)开机自启动服务


设置开机自启动

systemctl enable 服务名

停止开机自启动

systemctl disable 服务名


楠神一开始在/etc/init.d目录做软连接,使用service和systemctl命令一直报错,后来使用了

systemctl enable mysqld

就好了,也不知什么原因。


除了systemctl可以设置服务开机自启动,还有一办法:把启动某一服务的命令写入“/etc/rc.local”文件。


rc.local脚本是在系统初始化级别脚本运行之后再执行的,因此可以安全地在里面添加你想在系统启动之后执行的脚本。


结:


Linux是灵活的。正因为它的灵活性,我们总是可以找到许多不同的办法来解决同一个问题。启动系统服务的例子就是一个很好的佐证。有了/etc/init.d目录下的脚本,再加上/etc/rc.local这个利器,你可以放心的确保你的服务可以完美地启动和运行。


额外:


需要注意一下,ubuntu-18.04 默认是没有 /etc/rc.local这个文件的,那怎么办呢?


1)自己在/etc目录下创建rc.local文件,在文件里写入需要的shell脚本,并给于执行权限

chmod +x /etc/rc.local


2)在 /etc/systemd/system 目录下创建/lib/systemd/system/rc.local.service的软链接

ln -s /lib/systemd/system/rc.local.service /etc/systemd/system/


3)这样重启后,使用命令

systemctl list-units --type=service


可看到:

1.png


多了rc-local.service,这样代表成功了。