自 2017 年下半年,倾城之链服务,就部署于阿里云 ESC 服务器;在初开始的两年,总会因为些莫名的原因,服务器不定期会宕机,导致网站无法正常访问;这就必须做些 Hack 处理:让服务器重启后,服务可以自自动,而无需人为介入。Linux 系统(Ubuntu),如何设置开机启动脚本,来自启动服务呢?
借助 rc.local 脚本
rc.local 脚本,是一个在服务开启后,可以自动执行的脚本;可以在该脚本内添加命令行指令。该脚本位于 /etc/
路径下,需补充说明的是,它要 root 权限才能修改;另外,命令或脚本需要添加在 exit 0
之前。
假如说,想在服务自动重启、开启后,就可以启动基于 docker
搭建的服务,可以怎么处理呢?
#!/bin/sh -e
# rc.local
sh ~/restart-server.sh &
exit 0
# ~/restart-server.sh
cd forum.lovejade.cn
docker-compose up -d
关于 rc.local,它是在系统初始化级别脚本运行之后,再执行的;因此可以安全地在里面,添加你想在系统启动之后执行的脚本。
当然,您也可以通过在 /etc/init.d
中添加脚本来实现。
在 /etc/profile.d
目录中添加脚本文件
如果上面的方法,在您的系统不能够正常工作,那么不妨尝试下这种:在 /etc/profile.d
目录中添加脚本文件,其操作也更为简单,只需将在该目录下,添加脚本即可,亲测可以很好起作用。下面就 /etc/profile
与 /etc/profile.d
,做下介绍说明。
/etc/profile
/etc/profile
:此文件涉及系统的环境,即环境变量相关。这里的修改会对所有用户起作用。当一个用户登录Linux 系统或使用 su -
命令切换到另一个用户时,也就是 Login shell 启动时,首先要确保执行的启动脚本就是 /etc/profile
。
/etc/profile.d
/etc/profile.d
:在此目录中,存放的是一些应用程序所需的启动脚本,其中包括了颜色、语言、less、vim 及 which 等命令的一些附加设置。这些脚本文件之所以能够被自动执行,是因为在 /etc/profile
中,使用一个 for 循环语句来调用这些脚本。
两者主要存在以下区别:
- 两个文件都是设置环境变量文件的,
/etc/profile
是永久性的环境变量,是全局变量,/etc/profile.d/
设置所有用户生效。
/etc/profile.d/
比 /etc/profile
好维护,不想要什么变量,直接删除 /etc/profile.d/
下对应的 shell 脚本即可,不用像 /etc/profile
需要改动此文件。