把linux可执行程序做成一个服务

在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 ./wl_pro /usr/sbin/

cp ./wl_service /etc/init.d/

cd /etc/init.d/

chmod +x wl_service

cd /etc/rc3.d/

ln -sf ../init.d/wl_service ./S99wl_service

在标志install下的没一句话,前面一定要留空白,这不仅是有利于阅读,更是一个要求,makefile文件要求每一句可执行语句前都要有空白(空格或tab)。

上面代码中的wl_pro 和wl_service 分别是可执行文件名和服务名,这两个名称换成你自己的就行了,操作时用以下命令:

make install

运行完就一切OK了,简单吧?

-----------------------------------------------------

一般系统的运行级别是在   /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   的时候停止你的程序。

----------------------------------------------------------

系统服务介绍

1. alsasound :Alsa声卡驱动守护程序。

2. acpid:acpid(Advanced Configuration and Power Interface)是为替代传统的APM电源管理标准而推出的新型电源管理标准。通常笔记本电脑需要启动电源进行管理。

3. atalk:AppleTalk网络守护进程。

4. amd: 自动安装NFS守护进程。

5. anacron:一个自动化运行任务守护进程。

6. apmd:apmd(Advanced Power Management)是高级电源管理。

7. arptables_jf :为arptables网络的用户控制过滤的守护进程。

8. arpwatch: 记录日志并构建一个在LAN接口上看到的以太网地址和IP地址对数据库。

9. autofs:自动安装管理进程automount,与NFS相关,依赖于NIS服务器。

10. bootparamd:引导参数服务器,为LAN上的无盘工作站提供引导所需的相关信息。

11. bluetooch:蓝牙服务器守护进程。

12. crond :cron是Unix下的一个传统程序,该程序周期地运行用户调度的任务。比起传统的Unix版本,Linux版本添加了不少属性,而且更安全,配置更简单。类似计划任务。

13. chargen:使用tcp协议的chargen server,chargen(Character Generator Protocol)是一种网络服务,主要功能是提供类似远程打字的功能。

14. chargen-udp:使用UDP协议的chargen server。

15. cpuspeed:监测系统空闲百分比,降低或加快CPU时钟速度和电压从而在系统空闲时将能源消耗降为最小,而在系统繁忙时最大化加快系统执行速度。

16. dhcpd:动态主机控制协议(Dynamic Host Control Protocol)的服务守护进程。

17. cups:cups(Common UNIX Printing System)是通用UNIX打印守护进程。

18. cups-config-daemons:cups打印系统切换守护进程。

19. cups-lpd:cups行打印守护进程。

20. daytime:使用TCP 协议的Daytime守护进程,该协议为客户机实现从远程服务器获取日期和时间的功能。预设端口:13。

21. daytime-udp:使用UDP 协议的Daytime守护进程。

22. dc_server:使用SSL安全套接字的代理服务器守护进程。

23. dc_client:使用SSL安全套接字的客户端守护进程。

24. diskdump:服务器磁盘备份守护进程。

25. echo:服务器回显客户数据服务守护进程。

26. echo-udp:使用UDP协议的服务器回显客户数据服务守护进程。

27. eklogin:接受rlogin会话鉴证和用kerberos5加密的一种服务的守护进程。

28. gated :网关路由守护进程。它支持各种路由协议,包括RIP版本1和2、DCN HELLO协议、OSPF版本2以及EGP版本2到4。

29. gpm:gpm(General Purpose Mouse Daemon )守护进程为文本模式下的Linux程序如mc(Midnight Commander)提供了鼠标的支持。

30. gssftp: 使用kerberos 5认证的ftp守护进程

31. httpd:Web服务器Apache守护进程。

32. inetd :因特网操作守护程序。

33. innd:Usenet新闻服务器守护进程。

34. iiim:中文输入法服务器守护进程。

35. iptables:iptables防火墙守护进程。

36. irda:红外端口守护进程。

37. isdn:isdn启动和中止服务守护进程。

38. krb5-telnet:使用kerberos 5认证的telnet守护进程。

39. klogin:远程登陆守护进程。

40. keytable:该进程的功能是转载在/etc/sysconfig/keyboards里定义的键盘映射表,该表可以通过kbdconfig工具进行选择。您应该使该程序处于激活状态。

41. irqbalance:对多个系统处理器环境下的系统中断请求进行负载平衡的守护程序。如果你只安装了一个CPU,就不需要加载这个守护程序。

42. kshell :kshell守护进程。

43. kudzu:硬件自动检测程序。

44. ldap:ldap(Lightweight Directory Access Protocol)目录访问协议服务器守护进程。

45. lm_seroems:检测主板工作情况守护进程。

46. lpd :lpd是老式打印守护程序,负责将lpr等程序提交给打印 作业。

47. mdmonitor:RAID相关设备的守护程序。

48. messagebus:D-BUS是一个库,为两个或两个以上的应用程序提供一对一的通讯。

49. microcode_ctl:可编码以及发送新的微代码到内核以更新Intel IA32系列处理器。

50. mysqld: 一个快速高效可靠的轻型SQL数据库引擎守护进程。

51. named:DNS(BIND)服务器守护进程。

52. netplugd:netplugd(network cable hotplug management daemon)守护程序,用于监控一个或多个网络接口的状态,当某些事件触发时运行一个外部脚本程序。

53. netdump:远程网络备份服务器守护进程。

54. netfs:Network Filesystem Mounter,该进程安装和卸载NFS、SAMBA和NCP网络文件系统

55. nfs:网络文件系统守护进程。

56. nfslock:NFS是一个流行的通过TCP/IP网络共享文件的协议,此守护进程提供了NFS文件锁定功能。

57. ntpd:Network time Protocol daemon(网络时间校正协议)。ntpd是用来使系统和一个精确的时间源保持时间同步的协议守护进程。

58. network:激活/关闭启动时的各个网络接口守护进程。

59. psacct:该守护进程包括几个工具用来监控进程活动的工具,包括ac,lastcomm, accton 和sa。

60. pcmcia:主要用于支持笔记本电脑接口守护进程。

61. portmap:该守护进程用来支持RPC连接,RPC被用于NFS以及NIS 等服务。

62. postgresql: PostgreSQL 关系数据库引擎。

63. proftpd: proftpd 是Unix下的一个配置灵活的ftp服务器的守护程序。

64. pppoe:ADSL连接守护进程。

65. random :保存和恢复系统的高质量随机数生成器,这些随机数是系 统一些随机行为提供的。

66. rawdevices:在使用集群文件系统时用于加载raw设备的守护进程。

67. readahead、readahead_early:readahead和readahead_early是在Fedora core 2中最新推出的两个后台运行的守护程序。其作用是在启动系统期间,将启动系统所要用到的文件首先读取到内存中,然后在内存中进行执行,以加快系统的启动速 度。

68. rhnsd:Red Hat 网络服务守护进程。通知官方的安全信息以及为系统打补丁。

69. routed :该守护程序支持RIP协议的自动IP路由表维护。

70. rsync:remote sync远程数据备份守护进程。

71. rsh :远程主机上启动一个shell,并执行用户命令。

72. rwhod: 允许远程用户获得运行rwho守护程序的机器上所有已登录用户的列表。

73. rstatd:一个为LAN上的其它机器收集和提供系统信息的守候进程。

74. ruserd:远程用户定位服务,这是一个基于RPC的服务,它提供关于当前记录到LAN上一个机器日志中的用户信息

75. rwalld:激活rpc.rwall服务进程,这是一项基于RPC的服务,允许用户给每个注册到LAN机器上的其他终端写消息。

76. rwhod:激活rwhod服务进程,它支持LAN的rwho和ruptime服务。

77. saslauthd: 使用SASL的认证守护进程。

78. sendmail:邮件服务器sendmail守护进程。

79. smb:Samba文件共享/打印服务守护进程。

80. snmpd:本地简单网络管理守护进程。

81. squid:代理服务器squid守护进程。

82. sshd:OpenSSH服务器守护进程。Secure Shell Protocol可以实现安全地远程管理主机。

83. smartd:Self Monitor Analysis and Reporting Technology System,监控你的硬盘是否出现故障。

84. syslog:一个让系统引导时起动syslog和klogd系统日志守候进程的脚本。

85. time :该守护进程从远程主机获取时间和日期,采用TCP协议。

86. time-udp: 该守护进程从远程主机获取时间和日期,采用UDP协议。

87. tux:在Linux内核中运行apache服务器的守护进程。

88. vsftpd:vsftpd服务器的守护进程。

89. vncserver:VNC (Virtual Network Computing,虚拟网络计算)。

90. xfs:X Window字型服务器守护进程,为本地和远程X服务器提供字型集。

91. xinetd:支持多种网络服务的核心守护进程。

92. ypbind:为NIS(网络信息系统)客户机激活ypbind服务进程 。

93. yppasswdd:NIS口令服务器守护进程。

94. ypserv:NIS主服务器守护进程。

95. yum:RPM操作系统自动升级和软件包管理守护进程。

可以根据自己的需要觉得是否启动某系服务。如:u、iptables等是必须要运行的。echo、echo-udp、daytime、daytime- udp、chargen、chargen -udp做调试用可以关闭。rsh、rstatd、rsync、rusersd、rwalld这些命令都是Berkley远程命令,因为都以字母r开头, 故称r*命令。主要使用来使一台计算机上的某个用户以相同的帐户远程执行另一台计算机的一个程序,不要可以关闭,减少隐患。innd是运行新闻组服务的进程, 不要可以关闭。

----------------------------------------------------------

nohup是告诉系统忽略用户退出系统

让进程运行直到进程结束为止

比如我在远程打开ssh终端运行程序./server

如果不用nohup当我关闭ssh终端时

./server进程将会中止

使用nohup   ./server   &

可以在用户退出终端时

进程能继续执行

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-07 09:15:25

把linux可执行程序做成一个服务的相关文章

linux 开机自动启动一些服务

linux 开机自动启动一些服务,有很多方法,下面介绍两种1 要开机 运行只需将它加入到 rc local ,一般为 etc rc d rc local 在其中加入 linux 开机自动启动一些服务,有很多方法,下面介绍两种 1.要开机 运行只需将它加入到 rc.local ,一般为/etc/rc.d/rc.local 在其中加入以下行: 例子是开机后自动创建一个bbb.txt #!/bin/sh # # This script will be executed *after* all the

Linux下安装redis服务

一.安装Redis到/usr/local/redis 执行命令: 1. mkdir /usr/local/redis 2. cd /usr/local/src 3. wget http://download.redis.io/releases/redis-3.2.4.tar.gz 4. tar -xzf redis-2.6.14.tar.gz 5. ln -s redis-2.6.14 redis #建立一个链接 6. cd redis 7. make PREFIX=/usr/local/red

linux系统的crond服务

linux系统中有一个服务,用来做周期性运行的例行任务,这个服务就是crond服务.执行这项服务的命令 就是crontab命令了.而linux下的任务调度又分为系统任务调度和用户任务调度两个大类. 系统任务调度 系统周期性所要执行的工作,比如写缓存数据到硬盘,日志的定期清理一类的,在/etc目录下有一个 crontab的文件,这个就是系统任务调度的配置文件了.来看一下这个配置文件的说明 [[email protected] Desktop]# cat /etc/crontab SHELL=/bi

利用JAVA Service Wrapper把JAVA程序做成windows服务

今天复习了一下Java的基础知识,做了一个读取数据入库的程序.由于读取的数据每天都更新,于是就想把程序做成一个服务,每天定时执行.研究了一下,发现有几种方式可以做.下面我主要记录一下JAVA Service Wrapper方式.除此之外,我会把一些基本内容也贴上,以后复习所用. 一.下面是整个程序的功能部分: 1.连接数据库的功能.我写了一个DBConnecter类,是一个单例. public class DBConnecter { private static DBConnecter inst

C#创建服务及使用程序自动安装服务,.NET创建一个即是可执行程序又是Windows服务的exe

不得不说,.NET中安装服务很麻烦,即要创建Service,又要创建ServiceInstall,最后还要弄一堆命令来安装和卸载. 今天给大家提供一种方式,直接使用我们的程序来安装/卸载服务,并且可以让一个exe即能直接运行也行安装为windows服务 首先我们创建一个Windows应用程序,(我创建的是控制台程序,WinForm也一样) 接下来在项目中添加一个Windows服务类 然后双击"MainService.cs",在上面点右键"打开代码" 这里面写服务的具

Linux定时任务中用脚本代替可执行程序的一个好处

作者:iamlaosong 因为要修改导入程序,发现Linux定时任务中用脚本代替可执行程序的一个好处. Linux服务器中有个定时执行的任务,将下载的数据导入数据库,这样的任务一般都是凌晨启动.因为数据结构变化或者优化程序,就需要修改导入程序,而导入程序因为执行时间长,白天往往都在执行中,不能覆盖,只能用另一个名称保存,要想定时任务第二天启动时使用新的程序,就必须修改定时任务中的程序名. 如果定时任务中用的是脚本,在脚本中执行导入程序,则只要修改脚本中的可执行程序名就可以了,因为脚本是可以覆盖

如何把一个c语言程序做成windows服务开机自启动

原文:如何把一个c语言程序做成windows服务开机自启动 目前写的程序是一个用c语言实现socket侦听的,那么如何把这个程序做成开机自启动呢? 我们是通过vs6.0,编译后生成了.exe文件,然后对这个exe文件进行开机自启动设置.具体设置步骤如下: 第一,注册服务名称. (1)下载Instsrv.exe和srvany.exe两个文件.并将其拷贝到C:\WINDOWS文件夹下. (2)执行命令.C:\WINDOWS>instsrv hope c:\WINDOWS\srvany.exe 这里,

linux下如何查看一个服务所在的安装路径?

当接手一个不是自己维护的linux服务器,我们常常会想要看看该服务器上是否安装了某个服务,这个服务安装的路径在哪? redis 是开发过程中常常会用到的一个服务,我这里就以这个服务为例,进行说明. 1.执行ps -ef | grep redis 命令,结果如下: 小结:可以看到,通过ps命令只能查到服务的相对路径,查不到的进程的详细信息,如绝对路径. 2.执行ps -u 系统用户名,进一步确定进程id, 我这里的系统用户名是root,执行ps -u root,结果如下: 结合1的操作结果图可知,

linux学习一个服务(未完)

学习一个服务的过程 1.了解服务的作用:名字 功能,特点 2.安装 3.配置文件位置,端口 4.服务启动关闭的脚本 5.此服务的使用方法 6.修改配置文件,实战举例 7.排错(从下到上,从内到外) 原文地址:https://www.cnblogs.com/fps2tao/p/8542847.html