小编loo*_*une的帖子

start-stop-daemon和java - 怎么做对了?

我正在尝试将java程序作为服务运行.我的要求是:

1)在机器启动时启动java程序

2)如果java程序崩溃重启

3)作为特殊用户在特殊目录中执行它

旁注:我不能假设这是唯一运行的java进程,并且意外地运行该服务两次将是危险的.

到目前为止,我已尝试使用start-stop-daemon实现它.但是,应用程序在崩溃时不会自动重新启动(即,以非零退出代码终止).我想它有事情要做,我需要使用--background,因此,start-stop-daemon无法确定退出代码?我对么?如何正确解决此问题?(我更喜欢只有系统功能的解决方案,由于安全限制,没有第三方工具会更容易)

我当前的脚本(正如同样的说法,Dummy是一个虚拟的java应用程序,它永远在睡觉)

#!/bin/sh
### BEGIN INIT INFO
# Provides:          CI Master
# Required-Start:    $all
# Required-Stop:     $all
# Should-Start:      $portmap
# Should-Stop:       $portmap
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# X-Interactive:     false
# Short-Description: CI Master
# Description:       CI Master
### END INIT INFO

SERVICE_NAME="CI Master"
PIDFILE=/var/run/CI_master.pid
USER=ci
DIRECTORY=./master/
EXECUTABLE=/usr/bin/java
ARGUMENTS="Dummy"

. /lib/lsb/init-functions

case "$1" in
start)
    log_daemon_msg "Starting $SERVICE_NAME" "$SERVICE_NAME"
    start-stop-daemon --pidfile $PIDFILE --make-pidfile --background --chuid $USER --chdir /home/$USER/$DIRECTORY/ …
Run Code Online (Sandbox Code Playgroud)

java ubuntu

8
推荐指数
1
解决办法
1701
查看次数

如何透明地将输入元素与输出元素相关联

我从一些不受我控制的外部代码中得到了一个Flow<A, B>(这是一个花哨的流/图形,参见https://doc.akka.io/api/akka/current/akka/stream/scaladsl/Flow.html)。我需要包装该流程并对每个输入元素和每个输出元素进行一些处理。我可以通过BidiFlow像这样在它上面放一个来轻松实现这一点:

Flow<I, O, Unused> flow = ...; // external source
BidiFlow<I, I, O, O, Unused> bidi = BidiFlow.fromFunctions(i -> preprocess(i), o -> postprocess(o)); // do something on every input and every output
Flow<I, O, Unused> newFlow = bidi.join(flow);
Run Code Online (Sandbox Code Playgroud)

所以这里有一个转折点:为了正确地对输出元素进行后处理o,我需要生成该输出元素的输入。由于我无法控制底层流,因此我无法重构它以返回例如输入和输出的元组。而且由于 Akka 的异步和并行特性,我不能做任何技巧,例如将输入存储在线程本地或静态字段或类似的东西上。

所以我的问题是:我可以应用一些 Akka Streams 魔法以某种方式获取生成输出的输入元素吗?

scala akka akka-stream

5
推荐指数
1
解决办法
151
查看次数

使用 fifos/命名管道时的随机 141 信号

我理解 fifos 的方式,读取器或写入器的打开会阻塞,直到另一侧也打开,读取会阻塞,直到有人写入,并且当另一侧的最后一个关闭时,任何一侧都会关闭,即最后一个写入器关闭,读者也会关闭,反之亦然。

假设这是一个正确的理解,请给我一个谜语:我有两个过程。一个是 bash 脚本,另一个是 python。bash 脚本mkfifo在磁盘上创建一个 fifo,并在后台启动 python 脚本,并将 fifo 的名称作为参数。

我的 python 进程有一个像这样的主循环:

while True:
    with open(fifo_path, 'r') as fifo:
        for line in fifo:
            line = line.strip()
            if len(line) == 0:
                continue
            # code to handle line here ...
Run Code Online (Sandbox Code Playgroud)

简化的 bash 脚本执行以下操作:

mkfifo test.pipe
python myscript.py test.pipe &
# code ...
echo "foo" > test.pipe
# more code
echo "bar" > test.pipe
# ...
Run Code Online (Sandbox Code Playgroud)

根据我对管道的理解应该发生什么,读取 python 脚本将挂起,直到第一个 echo(或更具体地说是脚本)打开管道进行写入。然后他们将交换“foo”字符串,当回显完成时,管道关闭,这将导致 python 脚本收到 EOF。但是,由于循环再次打开,Python 脚本将继续执行,一切都会重复。

实际发生的情况是,有时我的 bash 脚本突然退出,退出代码为 …

linux io bash named-pipes mkfifo

5
推荐指数
0
解决办法
68
查看次数

设置Java AWS Lambda VM参数

有什么方法可以在Java AWS Lambda上配置VM参数?我已经搜索过AWS Lambda文档和博客,却找不到任何方法来配置基础系统。

java jvm aws-lambda

4
推荐指数
1
解决办法
1631
查看次数

标签 统计

java ×2

akka ×1

akka-stream ×1

aws-lambda ×1

bash ×1

io ×1

jvm ×1

linux ×1

mkfifo ×1

named-pipes ×1

scala ×1

ubuntu ×1