2

スクリプトを実行する必要があります。これは、socat を実行している多くのことの 1 つです。コマンド ラインからのスクリプトの実行は正常に機能します。このスクリプトをサービスとして実行する必要があります。

これは私が持っているスクリプトです:

#!/usr/bin/env sh

set -e

TTY=${AQM_TTY:-/dev/ttyUSB0}

/reg_sesion/create
DESTINOS=(http://127.0.0.1)

LOG_DIR=./logs-aqm

mkdir -p "${LOG_DIR}"

###ADDED####

echo $$ > /var/run/colector.pid

socat -b 115200 ${TTY},echo=0,crnl - |

grep --line-buffered "^rs" |
while read post; do
for destino in ${DESTINOS[@]}; do
wget --post-data="$(echo "${post}" | tr -d "\n")" \
-O /dev/null \
--no-verbose \
--background \
--append-output="${LOG_DIR}/${destino//\/}.log" \
"${destino}/reg_sesion/create"
done

echo "${post}" | tee -a "${LOG_DIR}/aqm.log"
done

そしてサービスファイル:

[Unit]
Description=colector

[Service]
Type=simple
PIDFile=/var/run/colector.pid

User=root
Group=root

#ExecStart=/root/socat.sh
ExecStart=/bin/sh -c '/root/socat.sh'

[Install]
WantedBy=multi-user.target 

サービスを開始すると、プロセスが開始され、すぐに終了します。

何か案は?

御時間ありがとうございます

4

1 に答える 1

2

サービス ファイルからPIDFile=を削除し、それが機能するかどうかを確認します。

PIDFile=は主にType=forking用であり、スタートアップ プログラムがサブプロセスをフォークするため、SYSTEMD に (PIDFile を介して) そのプロセスを監視するように指示します。Type=simpleの場合 、長期実行サービスで、SYSTEMD はサービスを開始するサブプロセスを作成するため、PID が何であるかを正確に認識します。

于 2014-09-29T02:56:25.540 に答える