質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
87.20%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

Raspberry Pi

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

解決済

Pythonを自動起動したい

karashiE
karashiE

総合スコア2

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

Raspberry Pi

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

2回答

0評価

0クリップ

414閲覧

投稿2021/12/10 06:08

編集2021/12/13 01:30

やりたいこと

OSを起動したときにPythonプログラムを起動するものを作っているのですが中々うまく行きません。
Pythonプログラムはmariadbから値を参照し、その中と同じ値を入力すれば解錠されるというものです
Pythonプログラムはmariadbと紐づけをしたプログラムなのでrc.localなどではできないためsystemdを用いて行っています。
systemdはtest.serviceという名前にしています。Pythonはtest.pyという名前です。

発生している問題・エラーメッセージ

test.service - test
Loaded: loaded (/etc/systemd/system/test.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Fri 2021-12-10 14:09:35 JST; 54s ago
Main PID: 388 (code=exited, status=1/FAILURE)

12月 10 14:09:35 raspberrypi python3[388]: self.connect(**kwargs)
12月 10 14:09:35 raspberrypi python3[388]: File "/usr/local/lib/python3.7/dist-packages/mysql/connector/abstracts.py", line 1014, in conn
12月 10 14:09:35 raspberrypi python3[388]: self._open_connection()
12月 10 14:09:35 raspberrypi python3[388]: File "/usr/local/lib/python3.7/dist-packages/mysql/connector/connection.py", line 426, in _ope
12月 10 14:09:35 raspberrypi python3[388]: self._socket.open_connection()
12月 10 14:09:35 raspberrypi python3[388]: File "/usr/local/lib/python3.7/dist-packages/mysql/connector/network.py", line 580, in open_co
12月 10 14:09:35 raspberrypi python3[388]: _strioerror(err),
12月 10 14:09:35 raspberrypi python3[388]: mysql.connector.errors.InterfaceError: 2003: Can't connect to MySQL server on '10.22.94.152:3306
12月 10 14:09:35 raspberrypi systemd[1]: test.service: Main process exited, code=exited, status=1/FAILURE
12月 10 14:09:35 raspberrypi systemd[1]: test.service: Failed with result 'exit-code'.

ちなみにエラー部分は再起動したときのもので、起動したあとにsystemctl start test.serviceをしてstatusをすると
● test.service - test
Loaded: loaded (/etc/systemd/system/test.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2021-12-10 15:00:15 JST; 995ms ago
Main PID: 2428 (python3)
Tasks: 1 (limit: 4915)
CGroup: /system.slice/test.service
└─2428 /usr/bin/python3 /home/pi/Python/test.py
12月 10 15:00:15 raspberrypi systemd[1]: Started test.

エラーはでてないので、再起動したときmariadbサーバより先に立ち上がっているからだめなんだろうなと思っています。

該当のソースコード

#Python test.py

import mysql.connector
import RPi.GPIO as GPIO
import time

#GPIOの設定

GPIO.setmode(GPIO.BCM)
GPIO.setup(25, GPIO.OUT)

#データベース接続
db = mysql.connector.connect(
host='10.22.94.152',
port='3306',
user='root',
password='password',
database='testdb',
charset ='utf8',
)

#接続できているか確認
print(db.is_connected())

#カーソル・参照する場所
cur = db.cursor()
cur.execute("select * from test")
rows = cur.fetchall()
gen = (row[1] for row in rows)
at = list(gen)
print(at)
while(1):
#入力関数
#val = input('>>入力待ち:')
af = int(22495) #データベース内の値をいれています、これをいれないとinput部分で.serviceにエラーが出るのでinputはコメント文にしています。
#読み込み時の判定
if af in at :
GPIO.output(25, GPIO.HIGH)
time.sleep(3)
print("解錠")
print ("----------")
GPIO.cleanup()
break
else:
GPIO.output(25, GPIO.LOW)
time.sleep(0.2)

print ("読み込んだ値が違います") print ("----------")

#test.service
[Unit]
Description = test
After = mariadb.service

[Service]
User = root
ExecStart = /usr/bin/python3 /home/pi/Python/test.py
Type = simple

[Install]
WantedBy = multi-user.target

試したこと

AfterをBeforeにしてみたり。
targetをnetwork.targetやmysql.targetに変えたりしました。

補足情報

Raspbian GNU/Linux 10 (buster)
Python3.7.3

初めて質問するので至らなぬ点があるかもしれませんがご了承ください

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

TaichiYanagiya

2021/12/11 15:08

mariadb は python プログラムと同じサーバーで稼働するのですか?
karashiE

2021/12/13 00:15

質問ありがとうございます。 はい、同じサーバーに稼働しています。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

Raspberry Pi

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