核心提示: 系统的服务在开机时一般都可以自动启动, 那在 Linux 系统下如果想要程序在开机时自动启动怎么办? 我们知道在 Windows 系统"开始"–>“所有程序”–>"启动"里面放个快捷方式就行, 那 Linux 系统下呢?
这也是一个比较简单的问题, 有不少的方法可以解决, 这里介绍三种方法。因为是简单介绍, 所以具体细节不是很详细, 可以通过 man
看看相关手册。
这是一个最简单的方法, 编辑 “/etc/rc.local”, 把启动程序的 shell 命令输入进去即可(要输入命令的全路径), 类似于 Windows 下的"启动"。
使用命令:
vi /etc/rc.local
然后在文件最后一行添加要执行程序的全路径。
例如, 每次开机时要执行一个 haha.sh
, 这个脚本放在 /opt
下面, 那就可以在 “/etc/rc.local” 中加一行 “/opt/./haha.sh”, 或者两行 “cd /opt” 和 “./haha.sh”。
通过 crontab
可以设定程序的执行时间表, 例如让程序在每天的 8 点, 或者每个星期一的 10 点执行一次。
crontab -l 列出时间表;
crontab -e 编辑时间表;
crontab -d 删除时间表;
vi
没什么差别(其实就是用 vi
编辑一个特定文件);那到底该如何编辑呢?
crontab
文件的格式是: M H D m d CMD
。
一个 6 个字段, 其中最后一个 CMD 就是所要执行的程序, 如 haha.sh
。
M
: 分钟(0-59)H
: 小时(0-23)D
: 日期(1-31)m
: 月份(1-12)d
: 一个星期中的某天(0-6, 0 代表周日)这 5 个时间字段用空格隔开, 其值可以是一个数字, 也可以用逗号隔开的多个数字(或其他) , 如果不需设置, 则默认为 “*”。
例如, 每天的 8 点 5 分执行 haha.sh
, 就是 “5 8 * * * /opt/./haha.sh”。
好像和 “开机程序自动启动” 扯远了, 现在回归正题。其实上面介绍的 crontab
的功能已经具备了开机自动启动的能力, 可以写一个监测脚本, 每 5 分钟执行一次(*/5 * * * * ./haha.sh
), 如果程序不在了就重新启动一次。
操作系统自带的服务, 如 ssh, ftp 等等, 开机都是自动启动的, 我们也可以通过这种方式让自己开发的程序提高"身价"。
比如我想把某个已经安装了的服务添加为系统服务, 可以执行以下命令:
chkconfig --add 服务名称 (首先, 添加为系统服务, 注意 add 前面有两个横杠)
chkconfig -leve 启动级别 服务名 on
(说明, 3
级别代表在命令行模式启动, 5
级别代表在图形界面启动, on
表示开启)
chkconfig -leve
启动级别 服务名 off
(说明, off 表示关闭自启动)
例如: chkconfig -level 3 mysql on
(说明: 让 mysql 服务在命令行模式, 随系统启动)
也可以使用 chkconfig --add
服务名称 来删除系统服务
如果要查看哪些服务被添加为系统服务可以使用命令 :
ntsysv 或者 chkconfig --list
如果要查看哪些程序被添加为自启动, 可以使用命令 :
cat /etc/rc.local (查看这个文件中添加了哪些程序路径)
下面举例说说, 如何把一个 shell 脚本添加为系统服务, 并跟随系统启动:
可以看到 “/etc/rc.d/init.d” 下有很多的文件, 每个文件都是可以看到内容的, 其实都是一些 shell 脚本。
系统服务的启动就是通过 “/etc/rc.d/init.d” 中的脚本文件实现的。我们也可以写一个自己的脚本放在这里。
脚本文件的内容也很简单, 类似于这个样子(例如起个名字叫做 “hahad”):
. /etc/init.d/functions
start() {
echo "Starting my process "
cd /opt
./haha.sh
}
stop() {
killall haha.sh
echo "Stoped"
}
写了脚本文件之后事情还没有完, 继续完成以下几个步骤:
chmod +x hahad #增加执行权限
chkconfig --add hahad #把 hahad 添加到系统服务列表
chkconfig hahad on #设定 hahad 的开关(on/off)
chkconfig --list hahad #就可以看到已经注册了 hahad 的服务
这时候才完成了全部工作。