オムロン環境センサ（2JCIE-BU）をラズパイで使ってみた。（９）

今まで作ってきたスクリプトなどをサービスで起動されるようにします。

* 2JCIE-BUからデータを取得してPostgreSQLに登録するスクリプト
* Juliusを起動するスクリプト

すでにサービスと起動しているのは、PostgreSQLとMetabaseです。

```shell-session: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.
```

```shell-session: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と作成しました。

```bash:run.sh
#!/usr/bin/bash

python3 /home/pi/omron_sensor/sensor2db.py
```

### サービス化するために設定ファイルを作成

```shell-session:
pi@raspberrypi:~ $ sudo vi /etc/systemd/system/sensor2db.service
```

```shell-session: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
```

:::note
最初ユーザモードでスクリプトを起動できずに悩んで時間が取られてしまいましたが、
WantedBy=multi-user.target 
の、設定を
WantedBy = default.target
とすることで解決できました。
systemdをもう少し勉強しないといけないなぁ。
:::

### サービスを有効化

```shell-session:
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
```

以下のコマンドを実行して、起動時にサービスが起動するようにします。

```shell-session:
pi@raspberrypi:~ $ loginctl enable-linger pi
```

### 動作確認

再起動してサービスが起動しているかどうか確認します。

```shell-session:
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と作成しました。

```bash:run.sh
#!/usr/bin/bash
julius -C ~/julius/dictation-kit-4.5/am-gmm.jconf -nostrip -gram ~/julius/dict/sensor -module
```

### サービス化するために設定ファイルを作成

```shell-session:
pi@raspberrypi:~/julius $ sudo vi /etc/systemd/system/julius.service
```

```shell-session: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
```

### サービスを有効化

```shell-session:
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
```

### 動作確認

```shell-session:
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.
```

## 音声合成

後日続くかも。。。