私は最新のアップデートを含むDebian Jessieを使用しています。サーバーの起動時にスクリプトを実行するためのsystemdサービスを作成しました。構成は次のとおりです。
[Unit]
Description=(my description)
[Service]
ExecStart=/usr/bin/bot
Restart=restart-always
[Install]
WantedBy=multi-user.target
/usr/bin/bot
Mono 実行可能ファイルを実行するスクリプトです。これには以下が含まれます。
#!/bin/bash
(cd /path/to/my/executable && mono bot.exe)
(ここでパスを変更しましたが、スクリプトのパスは正しいです。)
/usr/bin/bot
スクリプトを正常に(私の端末でのみ)実行すると、/usr/bin/bot
期待どおりに機能します。top
CPUの0〜20%を使用すると報告し、これは正常な現象です。ところで で始めると、service bot start
常にtop
CPUを100%以上使うと出てきます。
どちらの場合もbot
期待どおりに機能します。
CPU使用率のこの大きな違いをどのように説明できますか?
ありがとうございます。
ベストアンサー1
問題はsystemdにありません。
Systemdは標準入力(=/dev/null)なしでプロセスを実行します。すべてのシステムコールはread()
すぐに完了します(通常の標準入力を使用し、read()
新しいデータが到着するまでブロックされます)。通常、read()
完了していないループを呼び出すと、膨大なCPU使用率が発生します。これを確認するには、実行中のプロセスへの接続を試してくださいstrace -p <pid>
。
プロセスは、標準入力なしで実行するように調整するか、提案されたコマンドなどのいくつかのscreen
ラッパーを使用する必要があります。nohup