用批处理怎样把一个程序添加到系统服务项呢?

用批处理怎样把一个程序添加到系统服务项呢?,第1张

@Echo Off

sc create batservices binpath= "%~dp0123.exe" Type= share Start= auto 

Pause

这要看你的123.exe程序是否支持服务调用,如果不支持.那就要使用第三方程序加载才能启动.

例如: 使用srvany.exe,instsrv.exe这两个微软开发工具包中的工具加载指定程序和安装服务.

runassrv也可以将程序添加为服务运行.

你问的电脑系统的服务项指的是系统默认的服务程序,都属于自动添加的服务内容,一般不需要 *** 作者更改,但是极个别情况下需要 *** 作者更改服务项设置以后才能正常使用。举一个例子。惠普打印机在安装驱动的时候,往往需要 *** 作者自己打开电脑管理工具中的服务,把其中的把服务项中的print spooler项更改设置,原来默认的是关闭,只有更改为自动才能安装成功打印机驱动。

看过openstack源码的朋友都知道,在每个工程下,都有一个bin目录,下面是每个服务进程的启动脚本,使用python 脚本名就能运行一个服务。但对于Linux系统来说,有自己的一套服务管理程序。

关于早期的Linux系统的启动,熟悉Linux的人大多应该知道,init进程(PID=1)乃是所有进程的父进程,所有进程由它控制,init进程的运 行时间是内核完成文件系统的加载之后。早期的系统管理被称作SysV,它通过在代表各个run level的目录里建立脚本来控制服务的自动启动。比如,/etc/rc0.d目录里以S开头的脚本会被运行在run level0。在这种方式下,如果要屏蔽一个服务,需要把S开头的那个更名为以K开头。而所有在rc*.d下的脚本都链接到/etc/init.d目录 里。以安装OpenStack的SUSE系统为例,对于启动nova-compute服务命令,是service openstack-nova-compute start,那我们就到/etc/init.d目录下找到openstack-nova-compute这个脚本文件,内容如下

注意在start分支有这么一句:

startproc -t ${STARTUP_TIMEOUT:-5} -q /usr/bin/nova-$name $OPTIONS

这种写法就是标准的服务的写法,其中OPTIONS指定了日志配置和服务参数配置。

Ubuntu 从6.10开始逐步用Upstart代替原来的SysV init。进行服务进程的管理,目前Fedora和Debian也支持Upstart。Upstart采用了完全不同的方式。它要求所有的启动脚本,其实 是配置文件,建立在/etc/init目录下,每个服务一个文件,里面定义脚本启动与关闭的运行级别、条件、事件等。可以看出,Upstart要比 SysV高明得多,因为SysV启动是线性、顺序的,一个S20的服务必须要等待S19启动完成才能启动,如果一个启动要花很多时间,那么后面的服务就算 完全无关,也必须要等。而在Upstart下,服务的启动基于事件,而且是并行的,只要事件发生,服务可以并发启动。这种方式无疑要优越得多,因为它可以 充分利用现在计算机多核的特点,大大减少启动所需的时间。关于Upstart的详细介绍,可以参考Upstart的官网。

我们看一个在Ubuntu下的服务,在/etc/init目录下,有系统所有服务的Upstart配置文件,以nova-api.conf为例,内容如下:

Shell代码

description "Nova API server"

author "Soren Hansen [email protected]>"

start on runlevel [2345]

stop on runlevel [016]

chdir /var/run

pre-start script

mkdir -p /var/run/nova

chown nova:root /var/run/nova/

mkdir -p /var/lock/nova

chown nova:root /var/lock/nova/

end script

exec su -s /bin/sh -c "exec nova-api --config-file=/etc/nova/nova.conf" nova

简单解释:

start on和stop on定义了启动与停止的事件、运行级别等(还可以定义emits来定义这个服务自己触发的事件,也就是这个服务启动后发出的事件)。下面的pre- start script和post-start script是启动前后运行的脚本。exec一行就是服务的运行脚本。

那么怎样取消一个服务的自动启动?

拿nova-api.conf为例,只需要把start on注释掉就好了。但不要删除conf文件,这样以后仍然可以用start/stop这些命令来控制它的状态。

此外,另一个很有用的命令是initctl,在命令行输入initctl list即可列出所有服务的运行状态。用man initctl可以获取更多的信息。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11498099.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存