0

整体问题


当我通过 /etc/init.d/ 安装我编写的在后台启动时运行的简单 Java 应用程序时,它可以在我明确安装它的 liveUSB 上运行。当我复制那个棒时,它永远不会成功启动。启动 liveUSB 副本时,当 liveUSB 启动过程到达我的脚本时,Java 应用程序将始终挂起。我的脚本,它确实按照它应该做的,甚至每 5 分钟一次,并且会一直运行下去,直到你关闭机器。

  1. 我的脚本阻止了其他一切
  2. 除了我的脚本之外什么都没有加载
  3. 你不能取消我的剧本
  4. 没有图形用户界面
  5. 您可以看到的唯一文本是我的脚本的命令行输出

设置和测试- 一切顺利 :)


我有一个带有 3 个分区的 Linux liveUSB。加载了简单的标准 Xubuntu 图像。

  • sda1 > 2gb 存储
  • sda2 > 2gb 系统
  • sda3 > casper 的剩余 gb

我创建了一个简单的 Java 应用程序,它在启动时在后台运行。为了做到这一点,我遵循了以下步骤:

  1. 将java应用程序编译成类
  2. 将类文件放在 /home/user/folder/
  3. 将我的 startup.sh 脚本复制到 /etc/init.d/
  4. 在 /etc/init.d/ 里面
    • 输入“update-rc.d startup.sh start 20 2 5 .stop 20 0 1 6”。
    • 这成功更新了运行级别
  5. 现在我可以重新启动/重新启动/关闭任何操作,一切运行完美!

副本- 这就是它变得棘手的地方!


创建此棒的副本时,我遵循以下步骤:

  1. 挂载 sda2
    • 将该文件夹中的所有内容复制到 /home/user/Desktop/tmp-system/
  2. 挂载 sda3
    • 将该文件夹中的所有内容复制到 /home/user/Desktop/tmp-casper/
  3. 进入 /home/user/Desktop/tmp-system/
    • 键入“tar -cvf system.tar”。
  4. 进入 /home/user/Desktop/tmp-casper/
    • 键入“tar -cvf casper.tar”。
  5. 卸载
    • sda2
    • sda3
  6. 插入空 USB(例如 sdb)
    • 设置分区(与您从中复制的记忆棒相同)
    • 解压到分区
      • tar -xvf system.tar ... 进入 sdb2
      • tar -xvf casper.tar ... 进入 sdb3

测试- 一切都出错了!


  1. 将新创建的 liveUSB 插入计算机
  2. 从 USB 启动
  3. 一切都开始正常启动
  4. 我编写的 Java 应用程序被触发
    • 引导过程永远挂起
    • 没有可用的 cmd 提示符
    • 没有可用的图形用户界面
    • 就好像线程正在运行(确实如此!可以每 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 应用程序。

4

1 回答 1

0

您可能会更好地使用一种方法快速创建一个 liveUSB Linux 记忆棒,然后添加 Java 程序设置和目录。这里有一些帮助 -作为 live cd 的可启动 pendrive

我绝对喜欢你提到的第 1 点。复制 liveUSB 即使没有 Java 程序也不起作用。您已经花费了相当长的时间来调试该程序。我感觉您有兴趣制作许多安装了 Java 程序的 liveUSB。由于 dd 不是一个选项,我猜想以某种方式使用 Kickstart 程序进行快速 LiveUSB 安装然后复制 Java 内容更有意义。谢谢。

于 2017-09-24T15:01:57.260 回答