当前位置:首页 » 网页前端 » initd加脚本不起作用
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

initd加脚本不起作用

发布时间: 2023-06-05 13:49:23

A. 为什么我写的systemd脚本不工作

Systemd服务的内容主要分为三个部分,控制单元(unit)的定义、服务(service)的定义、以及安装部分。和SysVinit脚本的差异过去,*nix服务(守护精灵)都是用SysV启动脚本启动的。SysV启动脚本就是Bash脚本,通常在/etc/init.d目录下,可以被一些标准参数如start,stop,restart等调用。启动该脚本通常意味着启动一个后台守护精灵(daemon)。shell脚本常见的缺点就是,慢、可读性不强、太详细又很傲娇。虽然它们很灵活(毕竟那就是代码呀),但是有些事只用脚本做还是显得太困难了,比如安排并列执行、正确监视进程,或者配置详细执行环境。SysV启动脚本还有一个硬伤就是,臃肿,重复代码太多。因为上述的“标准参数”必须要靠各个脚本来实现,而且各个脚本之间的实现都差不多(根本就是从一个skeleton骨架来的)。而Systemd则进行了统一实现,也就是说在Systemdservice中完全就不需要、也看不到这部分内容。这使得Systemd服务非常简明易读,例如NetworkManager这一重量级程序的服务,算上注释一共才有19行。而它相应的SysV启动脚本头100行连标准参数都没实现完。Systemd兼容Sysv启动脚本,这也是为什么这么久我们仍然需要一个systemd-sysvinit软件包的原因。但是根据以上理由,最好针对所有您安装的守护精灵都使用原生Systemd服务来启动。另外,Systemd服务可无缝用于所有使用Systemd的发行版,意思是Arch下编写的脚本拿过来依然能够使用。通常来说,上游应该在发布源代码的同时发布Systemd服务,但如果没发布,你可以对照本教学来为它们写一个并贡献给它们。关于SysVinit启动脚本的编写可见openSUSE:Packaging_init_scripts,这主要用于你的服务器,毕竟服务器追求稳定软件更新的不是很勤(但你一定不知道欧盟汽车里的车载系统必须是Systemd)。真正开始前需要注意的问题如上所述,Systemd的service文件是完全跨发行版的,所以有时候没有必要重造轮子。真正编写你的服务前,请确认它在各大发行版中完全就不存在:我们的Systemd服务集合FedoraSystemd服务集合ArchLinuxSystemd服务集合GentooSystemd服务集合Debian中的少量Systemd服务ubuntu中的少量Systemd服务Systemd语法Systemd语法和.desktop文件的语法比较像,也比较类似Windows下的.ini文件,因此无论对于打包者还是最终用户都是非常容易上手的。主要格式请见下面的小例子,这里需要说明三点:Systemd单元文件中的以“#”开头的行后面的内容会被认为是注释Systemd下的布尔值,1、yes、on、true都是开启,0、no、off、false都是关闭。注:仅限于Systemd文件,比如:RemainOnExit=yes并不适用于该文件中嵌入的shell语句,比如:ExecStartPre=/usr/bin/test"x${NETWORKMANAGER}"=xyes这里的yes就不能替换。因为等号后面是一条嵌入的shell语句。Systemd下的时间单位默认是秒,所以要用毫秒(ms)分钟(m)等请显式说明。一个小例子NetworkManager的Systemdservice:[Unit]Description=NetworkManagerAfter=syslog.targetWants=remote-fs.targetnetwork.target[Service]Type=dbusBusName=org.freedesktop.NetworkManagerExecStart=/usr/sbin/NetworkManager--no-daemonEnvironmentFile=/etc/sysconfig/network/configExecStartPre=/usr/bin/test"x${NETWORKMANAGER}"=xyes#.NMcallsopenlog()#withLOG_PERRORwhenruninforeground.Butsystemdredirectsstderrto#syslogbydefault,.StandardError=null[Install]WantedBy=multi-user.targetAlso=NetworkManager-wait-online.service

B. 请教init.d的脚本写法的问题,谢谢

在etc/init.d/中新建(复制其它文件后清空其内容)ser2net,在ser2net加入如下内容(ser2net这个是我自己的启动文件,可改)#!bin/sh/etc/rc.common #/init.d/my-plugin START=80 start(){ ser2net #要运行的程序} 2、更改ser2net属性,使其为可执行文件chmod777 /etc/init.d/ser2net 或在winSCP中直接修改文件属性!!!我就是在这走了不少弯路!!! 3、在rc.d目录下做一个链接,启动时系统会按顺序启动rc.d目录下的脚本链接,对应执行init.d目录下的启动脚本。链接命令如下:ln -s../init.d/ser2net /etc/rc.d/S80ser2net

C. ubuntu下/etc/init.d/下面的脚本全都无效,没有任何回执信息,也没有错误提示,而且还没有起作用

可能是那些服务的启动脚本放置的目录不对,看看有没有连接到其他的文件名,或者可以利用rpm -ql 服务名称 查询一下该服务所涉及的配置文件的地方