【问题标题】:Run application during server boot time在服务器启动时运行应用程序
【发布时间】:2017-08-12 05:25:34
【问题描述】:

我有问题。 lsb_release -a结果

没有可用的 LSB 模块。
发行商 ID:Ubuntu
描述:Ubuntu 17.04
发行版:17.04 代号:zesty

这是我的自动启动脚本:start-app

#!/bin/bash
### BEGIN INIT INFO
# Provides:          data exchange
# Required-Start:    $all
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:
# Short-Description: Start data exchange service...
### END INIT INFO
echo 'after reboot' > /home/forte/test.txt
java -cp /home/forte/apps/data-exchange-service-1.0.jar org.springframework.boot.loader.JarLauncher &
exit 0

创建后我给予执行权限

chmod +x start-app

然后我把这个脚本移到/etc/init.d下并执行

update-rc.d start-app defaults
update-rc.d start-app enable

我检查了 rc*.d 文件夹,并且我的脚本链接存在于 [2,3,4,5]

但是当我重新启动服务器时,它不会运行我的应用程序。

我也试过 crontab

@reboot /home/forte/apps/start-app

但它们都不起作用 有没有其他办法?

补充说明 当我执行时

/etc/init.d/start-app start

我的应用正常运行

【问题讨论】:

  • 你在 /home/forte/test.txt 中看到了什么吗?您在 /etc/init.d 中看到任何其他文件吗?我不确定,但 ubuntu 17 可能正在使用 systemd,它具有不同的启动系统服务的机制。
  • 我检查了但重启后没有创建

标签: linux bash shell ubuntu startup


【解决方案1】:

您可以创建一个 systemd 单元,与 init.d 几乎相同,但由于 ubuntu 使用 systemd 作为 init,这可能会更有帮助。

这里是有关 systemd 单元的一些信息的链接。

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/sect-Managing_Services_with_systemd-Unit_Files.html

希望对你有帮助,

【讨论】:

  • 感谢您提供的额外链接。我跟着它创建了 systemd 单元。我启用了服务,但重新启动后服务没有自动启动。但是当我运行systemctl start my.service 时它可以正常工作
  • 也许journalctl -xe 可以为您提供一些关于为什么会发生这种情况的额外信息,希望对您有所帮助
  • 我检查过但没有帮助。我尝试了很多方法。直接执行脚本或仅执行 .sh 文件,但在我重新启动服务器时不起作用。每种方式我都有不同的错误。例如,当我在重新启动后直接运行我的 java 应用程序(execstart)时,它没有找到主类,但是当我手动运行它时它会正常工作。当我在重启后尝试 .sh 文件时,我得到了 chroot 错误
最近更新 更多