我目前在我们的项目中使用 RHEL 7.0。我有一个嵌入式应用程序,我想在启动时运行它。我有一个相同的 exe 文件。我尝试过使用 systemctl 命令,但没有帮助。我还尝试编辑 inittab 文件,但这也没有帮助。我还尝试添加 rc.local 文件并编辑 rc.d 以添加 rc.local 的执行,但它说该文件无法修改。 (当我尝试这个时,我处于 sudo 模式)。
我希望在启动时启动应用程序而不要求用户登录。另外,我们应该将 exe 保存在文件系统中的什么位置,以便在启动时检测到它。有人可以指导我如何实现这一目标吗?
答案1
您可以使用以下单元文件作为模板:
[Unit]
Description=A Test Service That Prints the date
After=network.target
[Service]
EnvironmentFile=-/etc/sysconfig/myservice
ExecStart=/usr/bin/bash -c "/usr/bin/date >> /now.txt" $MYSERVICE_ARGS
[Install]
WantedBy=multi-user.target
将其保存/etc/systemd/system/
为.service
文件扩展名(例如 /etc/systemd/system/myservice.service
)
您的应用程序所需的任何环境变量都可以放置在 中/etc/sysconfig/myservice
,包括创建一个变量来保存命令行选项:
MYSERVICE_ARGS=--posix
(如果您使用变量作为命令行选项,则将该变量添加到您的命令中,ExecStart
如下所示ExecStart=/usr/local/bin/myservice $MYSERVICE_ARGS
:)
测试它:
# systemctl start myservice
您现在应该有一个文件/now.txt
,每次运行时都会附加日期/时间。
让它在启动时启动:
# systemctl enable myservice
现在它应该在网络出现后自动启动。
更改该ExecStart
行以运行您的应用程序。请记住,它systemd
不在ExecStart
shell 中运行,因此如果您需要重定向,那么您需要bash -c
按照示例运行。另外,不会有$PATH
变量,因此使用完整路径。该应用程序将以用户身份运行root
。
您可以使用更多选项 - 阅读手册页。另外,浏览系统的单元文件/usr/lib/systemd/system
。