🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
.NET Core

.NET Coreは、マネージソフトウェアフレームワークでオープンソースで実装されています。クロスプラットフォームを前提に考えられており、Windows/Mac/Linuxで動くアプリケーションを作成することが可能です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

解決済

1回答

2196閲覧

Raspberry Pi3 で .net coreアプリの systemd に登録したら挙動がおかしい

edomoner

総合スコア8

.NET Core

.NET Coreは、マネージソフトウェアフレームワークでオープンソースで実装されています。クロスプラットフォームを前提に考えられており、Windows/Mac/Linuxで動くアプリケーションを作成することが可能です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

0クリップ

投稿2019/09/12 23:52

編集2019/09/13 09:28

.Net Core 2.2でTwitchlibを使いTwitchのBOTを作っています。
コメントが自作コマンドか、正規表現で引っ掛けて、マッチしたら定型文を返す簡単なものです。

作業環境

  • Win 10 64bit
  • VS C# 2019
  • .Net Core 2.2

実行環境

  • raspberrypi3b+
  • Linux raspberrypi 4.14.98-v7+ #1200 SMP Tue Feb 12 20:27:48 GMT 2019 armv7l GNU/Lin
  • .Net Core Runtime 2.27

vs c# 2019, Raspberry Pi コマンド直打ち(ditnet Bot.dll) では正常に動作しました。
systemdでサービス化したときに異常な動作になります。
BOT上からTwitchチャットへのコメント送信はできるが、コメント受信イベントが呼び出されていないようでした。
その他に一定間隔でコメントを投稿する部分では間隔が極端に短くなっていました。
下記のようなコードで6秒程度に1回の割合で送信されました。

TimerCallback callback = state => { client.SendMessage (channel, "send"); ; info_timer = new Timer (callback, null, 500, 1000 * 60 * 15);

サービスファイルは下記のとおりです。

service

1[Unit] 2Description="NAME" 3 4[Service] 5ExecStart=/usr/local/bin/dotnet Bot.dll 6WorkingDirectory=/home/pi/Bot/ 7Restart=always 8 9[Install] 10WantedBy=multi-user.target

環境変数の問題かと思い、コマンド環境(sshでpiでログイン)で

env > /etc/systemd/env を実行し サービスファイルに EnvironmentFile=/etc/systemd/env を追記

を実行しましたが変化がありませんでした。

どうすれば正常に動作するか教えて下さい。

追記

サービス化の手順は下記のとおりです

sftp経由でBot.dllほか依存DLLを/home/pi/Bot/にコピー /home/pi/Bot/ 内のファイル所有者はpi:pi sudo chmod -R 755 /home/pi/Bot/* sudo vim /etc/systemd/system/bot.service [Unit] Description="NAME" [Service] ExecStart=/usr/local/bin/dotnet Bot.dll WorkingDirectory=/home/pi/Bot/ Restart=always [Install] WantedBy=multi-user.target sudo chmod 755 /etc/systemd/system/bot.service sudo chown root:root /etc/systemd/system/bot.service sudo systemctl daemon-reload sudo systemctl start bot

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coco_bauer

2019/09/13 01:09

「systemdでサービス化した」について、手順や設定ファイルの内容なども含めて具体的に説明してください。 「systemdでサービス化した」事で挙動がおかしくなったのですから、その詳細を確認していくことが原因究明につながると思います。でも、質問の内容だけでは情報不足です。
guest

回答1

0

自己解決

Console.ReadLine() で起動状態を維持していたのが原因で、サービスなので入力待ちができずに一瞬で落ちてました。

Console.CancelKeyPress += (sender, eventArgs) => { eventArgs.Cancel = true; resetEvent.Set(); }; resetEvent.WaitOne();

を使うことで解決しました。

投稿2019/10/22 07:14

edomoner

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問