前提・実現したいこと
シリアル通信で受信したデータをDBに格納する、まではうまくいきましたが
それをデーモン化するところで詰まっています。
参考サイト:pythonスクリプトをdaemonにする
RasberryPiを使用
発生している問題・エラーメッセージ
pi@raspberrypi:/etc/systemd/system $ sudo systemctl status dat_ret.service ● dat_ret.service - dat_ret daemon Loaded: loaded (/etc/systemd/system/dat_ret.service; enabled; vendor preset: enabled) Active: failed (Result: exit-code) since Wed 2020-02-19 10:13:03 JST; 1s ago Process: 14257 ExecStart=/home/pi/web/cgi-bin/dat_ret.py (code=exited, status=127) Main PID: 14257 (code=exited, status=127) 2月 19 10:13:03 raspberrypi systemd[1]: dat_ret.service: Service RestartSec=100ms expired, scheduling 2月 19 10:13:03 raspberrypi systemd[1]: dat_ret.service: Scheduled restart job, restart counter is at 2月 19 10:13:03 raspberrypi systemd[1]: Stopped dat_ret daemon. 2月 19 10:13:03 raspberrypi systemd[1]: dat_ret.service: Start request repeated too quickly. 2月 19 10:13:03 raspberrypi systemd[1]: dat_ret.service: Failed with result 'exit-code'. 2月 19 10:13:03 raspberrypi systemd[1]: Failed to start dat_ret daemon.
dat_ret.py
/home/pi/web/cgi-bin/dat_ret.py
Python
1#!/usr/bin/env python3 2 3import serial 4import re 5import MySQLdb 6import time 7 8def main(): 9 connection = MySQLdb.connect( 10 host='127.0.0.1', 11 port=3306, 12 user='root', 13 passwd='pass', 14 db='sensordata') 15 cursor = connection.cursor() 16 17 con=serial.Serial('/dev/ttyAMA0', 115200, timeout=30) 18 line = con.readline() 19 num=re.findall('[0123456789.]+',line.decode('sjis')) 20 21 cursor.execute("""INSERT INTO data (temp, press, hum, light) VALUES (%s, %s, %s, %s)""" ,num) 22 connection.commit() 23 connection.close() 24 25if __name__ == '__main__': 26 while True: 27 main() 28 time.sleep(30)
main()の中単体で動かすことはできてます。
dat_ret.service
[Unit] Description = dat_ret daemon [Service] ExecStart = /home/pi/web/cgi-bin/dat_ret.py Restart = always Type = simple [Install] WantedBy = multi-user.target
試したこと
Failed with result 'exit-code'.の検索
↓
syslogの確認
Feb 19 10:13:03 raspberrypi systemd[1]: Started dat_ret daemon.
Feb 19 10:13:03 raspberrypi dat_ret.py[14257]: /usr/bin/env: `python3\r': そのようなファイルやディレクトリはあり ません
Feb 19 10:13:03 raspberrypi systemd[1]: dat_ret.service: Main process exited, code=exited, status=127/n/a
Feb 19 10:13:03 raspberrypi systemd[1]: dat_ret.service: Failed with result 'exit-code'.
Feb 19 10:13:03 raspberrypi systemd[1]: dat_ret.service: Service RestartSec=100ms expired, scheduling restart.
Feb 19 10:13:03 raspberrypi systemd[1]: dat_ret.service: Scheduled restart job, restart counter is at 5.
Feb 19 10:13:03 raspberrypi systemd[1]: Stopped dat_ret daemon.
Feb 19 10:13:03 raspberrypi systemd[1]: dat_ret.service: Start request repeated too quickly.
Feb 19 10:13:03 raspberrypi systemd[1]: dat_ret.service: Failed with result 'exit-code'.
Feb 19 10:13:03 raspberrypi systemd[1]: Failed to start dat_ret daemon.
ファイルやディレクトリはありません で検索
↓
リンク内容
$ sudo vi dat_ret.py
を見てみると末尾に^Mがたくさんついてました。
いつもTeraPadでかいてるせい?(改行コードはLFになってました)
とりあえず^M全部消して一応全角とかスペースでtabぽくなってたところとかを直してもう一度status見たけど何も変わらず。
$ sudo systemctl daemon-reload
しても変わらず。
???
というところで詰まっています。
知識不足は自覚しておりますがどうぞよろしくお願いいたします。
現在daemon化のためのコマンド等を調べ中です。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。