@Ultrakayo

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Raspberry pi 自動起動

Q&A

Closed

Raspberry pi4で起動を行いたいのですが
うまく起動しません。
systemdを使った自動起動を実行しております。
直接 dotnetコマンドを使用して自動起動を作成したのですが
うまく いかなかったので pythonを使用して
起動してみました。
1)start.py ( /home/pi/start.py)  
import os
os.system('dotnet ./my/myAppLinux.dll')
2) my.service記述 ( /etc/systemd/system/my.service )
[Unit]
Description=Auto-start dotnet Script on Boot
After=network.target
[Service]
Type=simple
User=pi
ExecStart=/usr/bin/python3 /home/pi/start.py
WorkingDirectory=/home/pi/my
StandardOutput=inherit
StandardError=inherit
Restart=on-failure
[Install]
WantedBy = multi-user.target
3)実行内容は
 1)2)それぞれ転送して
systemd に新しいサービスファイルを認識させ
sudo systemctl daemon-reload
サービスの有効化
pi@raspberrypi:~ $ sudo systemctl enable my.service
サービスの手動起動
pi@raspberrypi:~ $ sudo systemctl start my.service
さらに確認
pi@raspberrypi:~ $ sudo systemctl status my.service
結果は
○ my.service - Auto-start dotnet Script on Boot
Loaded: loaded (/etc/systemd/system/my.service; enabled; preset: enabled)
Active: inactive (dead) since Wed 2025-10-08 19:25:44 JST; 8min ago
Duration: 847ms
Process: 760 ExecStart=/usr/bin/python3 /home/pi/start.py (code=exited, sta>
Main PID: 760 (code=exited, status=0/SUCCESS)
CPU: 80ms

10月 08 19:25:43 raspberrypi systemd[1]: Started my.service - Auto-start dotne>
10月 08 19:25:44 raspberrypi python3[816]: sh: 1: dotnet: not found
10月 08 19:25:44 raspberrypi systemd[1]: my.service: Deactivated successfully.
 4)pi@raspberrypi:~ $で python start.pyを実行すると
 正常に起動するのですが
 pi@raspberrypi:~ $ sudo systemctl status my.service
の結果は 10月 08 19:25:44 raspberrypi python3[816]: sh: 1: dotnet: not found
です。
もちろん reboot後も自動起動しません。
ご教示願えれば幸いです。

0 likes

3Answer

DLLのパスが相対パスになってるからではないでしょうか?
絶対パスにするかスクリプトのパスを取得して結合するなどすればできないでしょうか?

0Like

Comments

  1. そもそも他のコマンド実行するだけならpythonじゃなくてshellファイルだけでも気もしますが(そこは好みの問題かな)

  2. @Ultrakayo

    Questioner

    早速のコメントありがとうございます。 
    dotnetとdllをFULL PATHにしたら動作しました。
    /home/pi/.dotnet/dotnet /home/pi/my/myAppLinux.dll
    実は dotnetが/.dotnet/と/dotnet/ 両方存在していて 8.0 9.0どちらか
    忘れてしまって・・・
    pythonを使用しない 方法もやってみます。 
    ご教示ありがとうございました。    

  3. パスが問題だったのであれば systemd で直接 ExecStart=/home/pi/.dotnet/dotnet /home/pi/my/myAppLinux.dll を指定すれば shell すら不要そうです。

  4. @Ultrakayo

    Questioner

    ExecStart=/home/pi/.dotnet/dotnet /home/pi/my/myAppLinux.dllでいけると思います。
    CUIで自動起動したのは いいのですが C#で作成したプログラムなのですが
    随所にDEGUB用にConsole.WriteLine("TEST")みたいなのを追加していますが
    どこにも 出力されていないのが 気になります。
    SSHで プログラムを起動すると 当然 ターミナルには 出力されますが・・・
    なにか うまい方法は ないものか それとも 設定ミスか

  5. どこにも 出力されていないのが 気になります

    標準出力(標準エラー出力)をファイルに出力すればよいのでは?

    例えば
    StandardOutput=/tmp/stdout.log
    StandardError=/tmp/stderr.log
    
    見るときは
    tail -f /tmp/stdout.log
    
  6. @Ultrakayo

    Questioner

    作成したプログラムは LOG出力機能があり 逐次出力しているため
    DEBUG用にLOGに出力するのはしたくないというのが 本音です。
    ディスプレーを接続したときに プログラムの進捗が わかればと思っています。
    Shellコマンドで自動起動した際に 
    [Desktop Entry]
    Exec=lxterminal -e /home/pi/codama/codama-doc/sebastien/example/autorun.sh
    Type=Application
    Name=Sebastien
    Terminal=true
    にすれば いいみたいな ことが 書いてありましたの それを参考にしたいと思います

     

Comments

  1. 10月 08 19:25:44 raspberrypi python3[816]: sh: 1: dotnet: not found

    パスが通ってないと思われるので、フルパスで書いてみてはどうでしょうか。

This answer has been deleted for violation of our Terms of Service.

Your answer might help someone💌