【发布时间】:2013-09-24 18:20:46
【问题描述】:
整体问题
当我通过 /etc/init.d/ 安装我编写的在后台启动时运行的简单 Java 应用程序时,它可以在我明确安装它的 liveUSB 上运行。当我复制那个棒时,它永远不会成功启动。启动 liveUSB 副本时,当 liveUSB 启动过程到达我的脚本时,Java 应用程序将始终挂起。我的脚本,它确实按照它应该做的,甚至每 5 分钟一次,并且会一直运行下去,直到你关闭机器。
- 我的脚本阻止了其他所有内容
- 在我的脚本之外没有加载任何内容
- 你不能取消我的脚本
- 没有图形用户界面
- 您可以看到的唯一文本是我的脚本的命令行输出
设置和测试 - 一切顺利 :)
我有一个带有 3 个分区的 Linux liveUSB。加载了简单的标准 Xubuntu 图像。
- sda1 > 2GB 存储空间
- sda2 > 2gb 系统
- sda3 > casper 的剩余 gb
我创建了一个简单的 Java 应用程序,它在启动时在后台运行。为了做到这一点,我遵循了以下步骤:
- 将 java 应用程序编译成类
- 将类文件放在 /home/user/folder/ 中
- 将我的 startup.sh 脚本复制到 /etc/init.d/
- 在 /etc/init.d/ 内部时
- 键入“update-rc.d startup.sh start 20 2 5 .stop 20 0 1 6。”
- 这成功更新了运行级别
- 现在我可以重新启动/重新启动/关闭任何操作,一切运行正常!
副本 - 这就是棘手的地方!
创建此棒的副本时,我遵循以下步骤:
- 安装 sda2
- 将该文件夹中的所有内容复制到 /home/user/Desktop/tmp-system/
- 安装 sda3
- 将该文件夹中的所有内容复制到 /home/user/Desktop/tmp-casper/
- 进入 /home/user/Desktop/tmp-system/
- 键入“tar -cvf system.tar”。
- 进入 /home/user/Desktop/tmp-casper/
- 键入“tar -cvf casper.tar”。
- 卸载
- sda2
- sda3
- 插入空 USB(例如 sdb)
- 设置分区(与您从中复制的记忆棒相同)
- 解压到分区
- tar -xvf system.tar ... 进入 sdb2
- tar -xvf casper.tar ... 进入 sdb3
测试 - 一切都出问题了!
- 将新创建的 liveUSB 插入计算机
- 从 USB 启动
- 一切都开始正常启动
- 我编写的 Java 应用程序被触发
- 引导过程永远挂起
- 没有可用的 cmd 提示符
- 没有可用的 GUI
- 就好像线程正在运行(确实如此!可以每 5 分钟查看一次输出 - 这正是它应该的方式)
解决方案尝试和陷阱
1
我可以挂载复制的 liveUSB 编辑 startup.sh 以不启动我的 Java 应用程序,它仍然无法启动(正如我所怀疑的那样?)。
2
如果我使用“dd if=sda of=sdb”,liveUSB 的副本将可以正常工作。然而,这不是一个可接受的解决方案。如果我用 dd 将 16gb 的记忆棒复制到 64gb 的记忆棒,这会将 64gb 记忆棒变成 16gb。
3
测试了许多 startup.sh 变体和 Java 应用程序本身。所有这些都会产生相同的错误。
4
我用来复制的方法适用于所有其他形式的应用程序、文件或其他任何东西。
5
我还想尽量避免使用任何额外的库或程序来帮助运行 Java 应用程序。
【问题讨论】:
-
很好的问题定义。但是......我不认为这是一个编程问题。您最好将其标记并要求版主转到 Superuser.com。祝你好运。
-
我也把它贴在那里了:S
标签: java linux daemon startup init.d