今まで作ってきたスクリプトなどをサービスで起動されるようにします。
- 2JCIE-BUからデータを取得してPostgreSQLに登録するスクリプト
- Juliusを起動するスクリプト
すでにサービスと起動しているのは、PostgreSQLとMetabaseです。
PostgreSQL
pi@raspberrypi:~/metabase $ sudo systemctl status postgresql
● postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
Active: active (exited) since Sat 2021-11-06 11:20:55 JST; 1 day 4h ago
Process: 643 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 643 (code=exited, status=0/SUCCESS)
11月 06 11:20:55 raspberrypi systemd[1]: Starting PostgreSQL RDBMS...
11月 06 11:20:55 raspberrypi systemd[1]: Started PostgreSQL RDBMS.
Metabase
pi@raspberrypi:~/metabase $ sudo systemctl status metabase
● metabase.service - metabase
Loaded: loaded (/etc/systemd/system/metabase.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2021-11-06 11:20:50 JST; 1 day 4h ago
Main PID: 471 (run.sh)
Tasks: 50 (limit: 4915)
CGroup: /system.slice/metabase.service
├─471 /bin/sh /home/pi/metabase/run.sh
└─499 java -Xmx500m -jar /home/pi/metabase/metabase.jar
11月 07 15:41:34 raspberrypi run.sh[471]: 2021-11-07 15:41:34,288 INFO metabase.task :: タスク SendAnonymousUsageStats を初期化しています 📆
11月 07 15:41:34 raspberrypi run.sh[471]: 2021-11-07 15:41:34,322 INFO metabase.task :: タスク SendAbandomentEmails を初期化しています 📆
11月 07 15:41:34 raspberrypi run.sh[471]: 2021-11-07 15:41:34,341 INFO task.send-pulses :: スケジュールされたパルスを送信しています…
11月 07 15:41:34 raspberrypi run.sh[471]: 2021-11-07 15:41:34,359 INFO metabase.task :: タスク SendPulses を初期化しています 📆
11月 07 15:41:34 raspberrypi run.sh[471]: 2021-11-07 15:41:34,452 INFO metabase.task :: タスク SendFollowUpEmails を初期化しています 📆
11月 07 15:41:34 raspberrypi run.sh[471]: 2021-11-07 15:41:34,502 INFO metabase.task :: タスク TaskHistoryCleanup を初期化しています 📆
11月 07 15:41:34 raspberrypi run.sh[471]: 2021-11-07 15:41:34,558 INFO driver.impl :: ドライバー:sqlの初期化中です...
11月 07 15:41:34 raspberrypi run.sh[471]: 2021-11-07 15:41:34,561 INFO driver.impl :: ドライバー:sql-jdbcの初期化中です...
11月 07 15:41:34 raspberrypi run.sh[471]: 2021-11-07 15:41:34,563 INFO driver.impl :: ドライバー:h2の初期化中です...
11月 07 15:41:34 raspberrypi run.sh[471]: 2021-11-07 15:41:34,598 INFO metabase.core :: Metabaseの初期化が完了しました
センサー値のデータベース登録スクリプト
(3)で作成したセンサーからデータベースに登録するスクリプトをsensor2db.pyとして、以下のディレクトに格納しました。
/home/pi/omron_sensor/sensor2db.py
で、起動スクリプトをrun.shと作成しました。
run.sh
#!/usr/bin/bash
python3 /home/pi/omron_sensor/sensor2db.py
サービス化するために設定ファイルを作成
pi@raspberrypi:~ $ sudo vi /etc/systemd/system/sensor2db.service
sensor2db.service
[Unit]
Description = sensor to database
After = local-fs.target
ConditionPathExists = /home/pi/omron_sensor
[Service]
WorkingDirectory = /home/pi/omron_sensor
ExecStart = /home/pi/omron_sensor/run.sh
ExecStop = /bin/kill ${MAINPID}
Restart = always
Type = simple
[Install]
WantedBy = default.target
最初ユーザモードでスクリプトを起動できずに悩んで時間が取られてしまいましたが、
WantedBy=multi-user.target
の、設定を
WantedBy = default.target
とすることで解決できました。
systemdをもう少し勉強しないといけないなぁ。
サービスを有効化
pi@raspberrypi:~ $ systemctl --user enable /etc/systemd/system/sensor2db.service
Created symlink /home/pi/.config/systemd/user/default.target.wants/sensor2db.service → /etc/systemd/system/sensor2db.service.
pi@raspberrypi:~ $ systemctl --user daemon-reload
pi@raspberrypi:~ $ systemctl --user start sensor2db
以下のコマンドを実行して、起動時にサービスが起動するようにします。
pi@raspberrypi:~ $ loginctl enable-linger pi
動作確認
再起動してサービスが起動しているかどうか確認します。
pi@raspberrypi:~ $ systemctl --user status sensor2db
● sensor2db.service - sensor to database
Loaded: loaded (/etc/systemd/system/sensor2db.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2021-11-08 18:30:12 JST; 21s ago
Main PID: 623 (run.sh)
CGroup: /user.slice/user-1000.slice/user@1000.service/sensor2db.service
├─623 /usr/bin/bash /home/pi/omron_sensor/run.sh
└─626 python3 /home/pi/omron_sensor/sensor2db.py
11月 08 18:30:12 raspberrypi systemd[572]: Started sensor to database.
音声認識(Julius)スクリプト
(8)で書いたようにJuliusをサーバモードで起動します。
センサーの時と同じように起動スクリプトをrun.shと作成しました。
run.sh
#!/usr/bin/bash
julius -C ~/julius/dictation-kit-4.5/am-gmm.jconf -nostrip -gram ~/julius/dict/sensor -module
サービス化するために設定ファイルを作成
pi@raspberrypi:~/julius $ sudo vi /etc/systemd/system/julius.service
julius.service
[Unit]
Description = sensor to database
After = local-fs.target
ConditionPathExists = /home/pi/julius
[Service]
WorkingDirectory = /home/pi/julius
ExecStart = /home/pi/julius/run.sh
ExecStop = /bin/kill ${MAINPID}
Restart = always
Type = simple
[Install]
WantedBy = default.target
サービスを有効化
pi@raspberrypi:~/julius $ systemctl --user enable /etc/systemd/system/julius.service
Created symlink /home/pi/.config/systemd/user/default.target.wants/julius.service → /etc/systemd/system/julius.service.
Created symlink /home/pi/.config/systemd/user/julius.service → /etc/systemd/system/julius.service.
pi@raspberrypi:~/julius $ systemctl --user daemon-reload
pi@raspberrypi:~/julius $ systemctl --user start julius
動作確認
pi@raspberrypi:~ $ systemctl --user status julius
● julius.service - sensor to database
Loaded: loaded (/etc/systemd/system/julius.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2021-11-08 18:57:09 JST; 24s ago
Main PID: 624 (run.sh)
CGroup: /user.slice/user-1000.slice/user@1000.service/julius.service
├─624 /usr/bin/bash /home/pi/julius/run.sh
└─628 julius -C /home/pi/julius/dictation-kit-4.5/am-gmm.jconf -nostrip -gram /home/pi/julius/dict/sensor -module
11月 08 18:57:09 raspberrypi systemd[557]: Started sensor to database.
音声合成
後日続くかも。。。