我遇到了一个奇怪的问题,可能与硬件初始化有关。我正在开发一个基于 Java 的自动数据采集系统,该系统在装有 Ubuntu 16.04 的 SBC 上运行。数据采集程序目前通过 cron 启动,但我计划切换到 systemd。
如果我重新启动系统,它就可以正常启动并运行。但是,如果关闭电源并冷启动(这是正常方式),程序就会崩溃并出现错误free(): corrupted unsorted chunks
。如果我再次启动它,它似乎运行良好。我需要找出原因,希望能够找到,但这可能需要一些时间,同时系统需要进一步测试,我需要一种在系统崩溃时重新启动它的解决方法。仅仅增加延迟是没有用的。
我想做的是重新启动 Java 进程或从 bash 包装器脚本重新启动系统,但前提是它崩溃了。如果它以零退出代码退出(或者,理想情况下,以预定的一组允许退出代码中的任何代码退出),则不应重新启动它,并且脚本也应退出。
答案1
如果您可以编写 Bash 脚本,请安排该脚本而不是您的程序:
#!/bin/bash
myprogram
while [ $? -ne 0 ]; do
myprogram
done
此脚本将重新启动您的程序,直到它以 0 错误代码退出(表示成功)。此外,重新启动整个系统似乎轻微地对我来说太过了。
答案2
除了@Nathan.Eilisha Shiraini 解决方案之外,还考虑到在 Bash 中模拟 do-while 循环
#!/bin/bash
while : ; do
myprogram
[[ $? -ne 0 ]] || break
done