把可执行程序做成一个服务
在linux系统启动的时候,我们可以看到很多服务性程序一个接一个的被启动(就是那些后面有一个兰色[OK]的行),这些在后台运行的程序为我们使用计算机起了很重要的作用,以这种方式运行的程序有以下特点:
开机启动,关机停止(废话!关机了还运行啊???)
后台运行
通过service 命令控制或查看对应的程序的运行状态
恩,不错,那怎么把我们自己编制的程序做成这样的一个服务呢?
废话少说,主要分以下3步:
1、把可执行程序放到一个linux系统可以找到的地方。
在linux命令提示符下输入 env ,回车后可看到环境变量,里面有一项PATH的,对,这项里所指定的目录都是系统可找到的地方,把我们的可执行程序放入其中的一个目录下即可,我们一般放在/usr/sbin/目录下(放什么有放什么的地方,最好不要乱放)。
2、在目录 /etc/init.d/ 下,新建一个以服务名为文件名的文件。
如果我们打开目录 /etc/init.d/,看到的文件其实都是服务程序文件,每个文件的内容都大同小异,我们会看到,这里的文件在文件结构上几乎是一样的。几乎每个文件都有 start、stop、restart和status这样的标志,对,我们新建的这个文件也具有相同的结构,只是在这些标志内部把相应的可执行程序换成我们自己的可执行程序即可,知道怎么做了吗?那就是:复制——修改——保存。
3、在目录 /etc/rc3.d/ 下,新建一个指向在第2步中建立的服务文件的符号连接文件。
打开目录 /etc/rc3.d/ ,我们将看到这里都是符号连接文件(linux系统中的符号连接相当于windows中的快捷方式)。采用以下命令格式:
ln -sf 目标文件名 连接文件名
连接文件名益采用“SXX目标文件名”的格式,其中XX一般是一个从1到100的整数,它表示启动优先级,数字越大,优先级越低,比如:服务A的运行要依赖服务B,那A的XX数字就应该大于B的。后跟“目标文件名”是为了一目了然,一看就知道是哪个文件的符号连接。
目录 /etc/rc3.d/ 是系统启动时自动搜索的目录,该目录下的符号连接文件的目标文件,都将被运行,这就是在这个目录建立符号连接的原因——为了开机就运行。
好了,完成以上3个步骤,你就把自己的一个可执行程序做成系统的一个服务了,它具有我们一开始说的几个特定。我们可以用service命令控制这个程序了:
启动:service hdz_service start
停止:service hdz_service stop
重启:service hdz_service restart
上面的 hdz_service 为服务名,也就是在第2步中建立的文件名。
不过,好象感觉比较麻烦,能否把这几个步骤自动化一下?这样在一台新机子上部署就方便了,也更象回事 -_^!办法当然有了,还记得我们那个记录代码文件之间依赖关系的makefile文件吗?呵呵,我们在这里要用到它了。
在makefile文件中添加一个标志,并在该标志下添加和下面类似的代码:
install:
cp ./hdz_pro /usr/sbin/
cp ./hdz_service /etc/init.d/
cd /etc/init.d/
chmod +x hdz_service
cd /etc/rc3.d/
ln -sf ../init.d/hdz_service ./S99hdz_service
在标志install下的没一句话,前面一定要留空白,这不仅是有利于阅读,更是一个要求,makefile文件要求每一句可执行语句前都要有空白(空格或tab)。
上面代码中的 hdz_pro 和 hdz_service 分别是可执行文件名和服务名,这两个名称换成你自己的就行了,操作时用以下命令:
make install
运行完就一切OK了,简单吧?
大家在看我写的东东时,时不时会碰到“hdz”这样的东西,这是我名字的缩写,说明这正是要替换的。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/compiler_hdz/archive/2005/08/22/461193.aspx