在 OpenSuse 12.1 上向 inittab 添加项目

Boa*_*rdy 7 startup opensuse init

我目前正在处理一个需要添加的项目,inittab以便程序在启动期间加载。

我试图启动的程序是 ac# mono 应用程序。我已经创建了一个启动脚本,如果启动脚本是手动运行的,程序会正常启动。但是,当我将其放入inittab程序时不会启动。

我已经签入,/var/log/messages但没有说有什么问题,只是说正在重新加载。

以下是我添加到inittab脚本中的内容

bes:2345:respawn:/home/bits/MyProgram/start.myprogram
Run Code Online (Sandbox Code Playgroud)

感谢您的任何帮助,您可以提供

更新 下面是位于/home/bits/MyProgram 中的启动脚本中的代码。

#!/bin/sh

cd /home/bits/MyProgram

/usr/bin/mono EmailServer.exe "$@"
Run Code Online (Sandbox Code Playgroud)

我还尝试将 > mylog.txt 添加到以 /usr/bin/mono 开头的行尾,例如

/usr/bin/mono EmailServer.exe "$@" > mylog.txt

如果我手动运行启动脚本,即使我不在启动脚本所在的目录中,它也能正常工作,只是当我将它添加到 inittab 并运行 telinit q 时,它永远不会启动并且日志没有写入但是如果我手动启动程序,日志确实会被写入。

感谢您的任何帮助,您可以提供。

lor*_*nix 6

把你的程序放在某个地方。

复制并编辑在/etc/init.d/skeleton 中找到的用于初始化作业控制的骨架模板文件。

修改此文件以指示您想要的运行级别...在您的示例中,您需要 2、3、4、5,文件顶部(在注释中)有选项来指示所需的运行级别

将此新文件放在/etc/init.d 中,并为其指定一个描述性名称。(示例中使用了myfancyname

一种平台不可知的方法来测试这个,或者启用/禁用(如果你使用了骨架文件)

sudo /etc/init.d/myfancyname start
sudo /etc/init.d/myfancyname stop
sudo /etc/init.d/myfancyname restart
Run Code Online (Sandbox Code Playgroud)

有发行版特定的方法来执行这些相同的操作,例如,Debian 使用update-rc.d myfancyname [start|stop|enable|disable...]

修改 inittab通常是一个主意,如果你搞砸了,系统将不再启动,然后你就会遇到两个问题。(不需要正则表达式!)

将脚本添加到 /etc/init.d/ 子目录更加标准化,几乎可以用于任何 linux 风格,可能是一些 *nix 的,也可能是一些 bsd 的。


Ulr*_*gel 4

问题很简单,您使用的是 OpenSuse 12.1,它使用 systemd而不是经典的System V 引导系统

要安装新的服务位置,请在 /etc/systemd/system/myprogname.service 中创建以下文件

[Unit]
Description=My progname service file

[Service]
ExecStart=/home/bits/MyProgram

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

之后运行systemctl daemon-reloadsystemctl start myprogname.service

如果你想自动重新启动 MyProgname 你必须添加

Restart=restart-always
Run Code Online (Sandbox Code Playgroud)

到服务部分。