高分请教: linux下如何写服务程序

sunshine_djh 2005-04-04 08:37:57
写了个守护进程,但不知道怎样把这个程序添到服务列表里去,请问要怎么才能到服务列表里去,要写code还是在哪个地方配置以下?
...全文
635 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
slone 2005-04-06
  • 打赏
  • 举报
回复
后面的数字 当然不需要相同,只是个加载顺序而已
运行级别是对整个系统而言的,针对应用程序不是,可以看看这里
http://www.tongyi.net/article/20020412/200204123250.shtml

如果你是图形登录,运行级是5 ,所以配置可以这样改
ln -s /usr/src/MyServer /etc/rc5.d/S98MyServer
ln -s /usr/src/MyServer /etc/rc0.d/K99MyServer
sunshine_djh 2005-04-06
  • 打赏
  • 举报
回复
感谢各位,我现在已经基本清楚了,马上结贴给分
watcher_shen 2005-04-06
  • 打赏
  • 举报
回复
嗯,楼主的问题这几位回答的都已经很全面了……
qfxx 2005-04-06
  • 打赏
  • 举报
回复
nohup是告诉系统忽略用户退出系统
让进程运行直到进程结束为止
比如我在远程打开ssh终端运行程序./server
如果不用nohup当我关闭ssh终端时
./server进程将会中止
使用nohup ./server &
可以在用户退出终端时
进程能继续执行
brothersun0116 2005-04-06
  • 打赏
  • 举报
回复
学习学习……
Wolf0403 2005-04-06
  • 打赏
  • 举报
回复
一般系统的运行级别是在 /etc/inittab 里面指定的。有一行是类似
id:5:initdefault:
或者
id:3:initdefault:
的,这里的数字就是系统的默认运行级别。假设是 5。

启动服务的是依靠 /etc/init.d/ 下的脚本启动的。这些都是普通的 shell 脚本,系统在调用的时候,如果是启动服务,则传入 start 作为参数;stop 表示停止;restart 表示重启。因此你可以写一个脚本,比如简单的如这样:

#!/bin/sh

ARG=$1

case $ARG in
start):
nohup /path/to/your/program &
;;
stop):
pkill program
;;
restart):
pkill program
nohup /path/to/your/program &
;;
esac

把这个脚本放在 /etc/init.d 里面,譬如 /etc/init.d/your_prog
然后加入相应运行级别的链接:在 5 级启动则
ln -s /etc/init.d/your_prog /etc/rc5.d/S100your_prog
ln -s /etc/init.d/your_prog /etc/rc0.d/K100your_prog
这里两个数字都可以用对应目录里最大的数字,因为没有别的服务依赖你的服务。
这样表示,当系统进入 init level 5 的时候启动你的程序,进入 init level 0 的时候停止你的程序。


sunshine_djh 2005-04-05
  • 打赏
  • 举报
回复
yindesheng() and slone(slone):
假设我的程序名字叫MyServer,位于/usr/src/,是否应该用以下命令
ln -s /usr/src/MyServer /etc/rc3.d/S98MyServer
ln -s /usr/src/MyServer /etc/rc0.d/K99MyServer

为什么要在rc3下选择S98,为什么不是S99或K98?
rc0下的K99后面的数字怎么不跟S98后面的数字一致呢

还有,我用这两个命令生成的S98MyServer和K99MyServer是乱码呀
sunshine_djh 2005-04-05
  • 打赏
  • 举报
回复
另外一个问题
我生成了守护进程,怎么一调用一个.so里的函数都不成功,因为我用ps -A看不到我的程序
sunshine_djh 2005-04-05
  • 打赏
  • 举报
回复
谢谢 qfxx(秋风萧萧),我试了下这个命令,连一般的程序也可以让它在后台运行。只运行 ./server & 也可以呀,nohup的作用是什么呢

我用
ln -s ~/dd /etc/rc3.d/S98dd
ln -s ~/dd /etc/rc0.d/K99dd
生成的S98dd和S99dd文件怎么是乱码,而我看到系统中已有的却不是乱码
qfxx 2005-04-05
  • 打赏
  • 举报
回复
假设你的程序名字为server
运行守护进程如下
nohup ./server &
nohup把程序放到后台运行 要与&配对使用
sunshine_djh 2005-04-05
  • 打赏
  • 举报
回复
slone,请问一下怎么设置守护进程的运行级别呢,我用fork做的守护进程,还有对于同一程序而言,S和K后面的数字是否要求必须相同?
谢谢!
slone 2005-04-05
  • 打赏
  • 举报
回复
ln -s /usr/src/MyServer /etc/rc3.d/S98MyServer
ln -s /usr/src/MyServer /etc/rc0.d/K99MyServer
上面两条命令写后服务列表里没有我的MyServer

还要看你的运行级别,这个例子是说在运行级别3时启动。
slone 2005-04-05
  • 打赏
  • 举报
回复
ln -s /usr/src/MyServer /etc/rc3.d/S98MyServer
ln -s /usr/src/MyServer /etc/rc0.d/K99MyServer

S98 和K99 只是举了两个例子,一般而言守护进程都是S、K + 2位数字+程序名的,命名规则而已,2位数字你得看对应文件夹中有不用没用的数字,就可以了,最好不要重复,这个是加载的顺序,LN 只是创建了一个连接,系统启动时会自动调用创建的链接的。
sunshine_djh 2005-04-05
  • 打赏
  • 举报
回复
ln -s /usr/src/MyServer /etc/rc3.d/S98MyServer
ln -s /usr/src/MyServer /etc/rc0.d/K99MyServer
上面两条命令写后服务列表里没有我的MyServer

更改/etc/rc.local倒是简单,但这个文件里只有一句话:
touch /var/lock/subsys/local
我要是要把我的MyServer程序加进去怎么写呢,格式是什么样子的呢

这两种方法有什么区别呢
watcher_shen 2005-04-05
  • 打赏
  • 举报
回复
“我用这两个命令生成的S98MyServer和K99MyServer是乱码呀” ——这是两个连接而已,正常。

“而我看到系统中已有的却不是乱码”——有些是,有些不是。这取决于它是否就是在这个位置开始自己的程序。

那些不是的本身就是程序了。
sunshine_djh 2005-04-05
  • 打赏
  • 举报
回复
高手们,现有的/etc/rc.local只有一句话:
touch /var/lock/subsys/local
我要是要把我的MyServer程序加进去怎么写呢,格式是什么样子的呢
rocketliu8899 2005-04-05
  • 打赏
  • 举报
回复
加到/etc/rc下的rc.local文件里即可,reboot后看效果

是的
itsmewhy 2005-04-05
  • 打赏
  • 举报
回复
加到/etc/rc.local文件里即可,reboot后看效果
ssli 2005-04-05
  • 打赏
  • 举报
回复
加到/etc/rc下的rc.local文件里即可,reboot后看效果
yindesheng 2005-04-04
  • 打赏
  • 举报
回复
slone(slone):我看到rc3.d rc0.d下有好多文件,怎么样才能生成诸如S98dd, K99dd这样的文件?是要自己一句一句的写吗?
能不能劳驾从头告诉我怎么写?我是菜鸟
----------------------------------------------------------------
用下面的命令生成:
ln -s ~/dd /etc/rc3.d/S98dd
ln -s ~/dd /etc/rc0.d/K99dd
加载更多回复(4)

23,124

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧