我的java应用程序只有这个:
System.out.println("waiting for input...");
PrintWriter writer = new PrintWriter("/home/pc/test-java.txt", "UTF-8");
writer.println("The first line");
writer.println("The second line");
writer.close();
System.in.read();
文件创建得很好,然后该过程似乎在没有警告的情况下死亡。我在文档中找不到可以解释这种行为的任何内容。我根本不被允许等待输入吗?新贵如何知道我正在尝试阅读输入并阻止它?它为什么关心?我这里只是新手脚本测试。
以下是完整的脚本:
start on runlevel [2345]
stop on runlevel [016]
respawn
respawn limit 2 5
script
exec java -jar /home/pc/test-0.0.1-SNAPSHOT.jar
end script
答案 0 :(得分:2)
Upstart documentation for the console
stanza的一些相关摘要:
对于v1.4之前的所有Upstart版本,控制台的默认值为
console none
。自Upstart 1.4起,默认值为console log
。6.5.1
console log
将标准输入连接到 / dev / null 。6.5.2
console none
将作业的标准输入,标准输出和标准错误文件描述符连接到 / dev / null 。6.5.3
console output
将作业的标准输入,标准输出和标准错误文件描述符连接到控制台设备。
因此,在所有版本的Upstart中,stdin
默认情况下会映射到/dev/null
。因此,System.in.read()
立即读取文件结束(EOF)并返回。
要获得您想要的行为,请在您的Upstart作业定义中添加console output
或console owner
:
start on runlevel [2345]
stop on runlevel [016]
respawn
respawn limit 2 5
console output
# OR
#console owner
script
exec java -jar /home/pc/test-0.0.1-SNAPSHOT.jar
end script