我们安装了那么多软件,每次启动还需要去安装目录执行文件,比如重启mysql服务:
/usr/local/mysql/support-files/mysql.server start
简化一点,在某一命令目录放一软连接
通常我们不这样做,建软连接也是建在“/etc/init.d”目录里。为什么建在这个目录里?
init.d目录包含许多系统各种服务的启动和停止脚本。
我们可以使用两个命令:systemctl和service操作这些服务。
1)添加服务
看上图,在“/etc/init.d/”目录还没有建立软连接时,使用service命令无法操作mysql。建完软连接,service命令可以操作mysql了。
注意:“mysqld”是为mysql服务进程的名字。大家也会注意到,好多服务,进程名字起名方法是“服务名+d”。例如memcache服务的进程名是“memcached”,ssh协议的进程名是“sshd”。
service --status-all
查看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 服务名 on | systemctl enable 服务名 |
使某服务不自动启动 | chkconfig --level 3 服务名 off | systemctl disable 服务名 |
检查服务状态 | service 服务名 status | systemctl status 服务名 (服务详细信息) systemctl is-active 服务名 (仅显示是否 Active) |
显示所有已启动的服务 | chkconfig --list | systemctl list-units --type=service |
启动某服务 | service 服务名 start | systemctl start 服务名 |
停止某服务 | service 服务名 stop | systemctl stop 服务名 |
重启某服务 | service 服务名 restart | systemctl 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
可看到:
多了rc-local.service,这样代表成功了。