NanoPi NEO2でのタイムラプス撮影ですが、前回はcronが使えないようなので、スクリプト中でsleepして周期の調節をしていました。
で、いろいろ調べていたら、systemdのtimerユニットで似たようなことが実現できるようなのでやってみました。
1.スクリプトの作成
ログイン中であればユーザー権限でtimerユニットを動作させることもできるようなのですが、今回はroot権限で動作させます。
/usr/local/bin/TimerImageとして以下のファイルをrootで作成しました。
#!/bin/sh DATE=$(date +"%Y%m%d%H%M%S") fswebcam --quiet --jpeg 80 --timestamp "%Y-%m-%d %H:%M:%S (%Z)" -r 800x600 /DATA/TimerImage/pictures/$DATE.jpg
(/DATAはHDDをマウントしてあるディレクトリです) 作成したら、実行権限を付与しておきます。
2.サービスファイルの作成
/etc/systemd/system/TimerImage.serviceとして以下のファイルを作成しました。
[Unit] Description=Time Lapse Capture [Service] Type=simple ExecStart=/usr/local/bin/TimerImage
3.timerを設定する
/etc/systemd/system/TimerImage.timerとして以下のファイルを作成しました。
[Unit] Description= Capture every 10 seconds [Timer] AccuracySec=1sec OnCalendar=*-*-* *:*:00/10 Unit=TimerImage.service [Install] WantedBy=multi-user.target
作成後、以下のようにして起動します。
$ sudo systemctl daemon-reload $ sudo systemctl start TimerImage.timer $ sudo systemctl enable TimerImage.timer
daemon-reload は設定ファイルを修正した場合に再読み込みさせる際に必要です。(=初回は必要ない)
4.動作状態を確認する
以下のようにして動作状態を確認することができます。再起動しても自動的に起動することも確認できました。
$ systemctl --system --all list-timers NEXT LEFT LAST PASSED UNIT ACTIVATES Mon 2018-01-08 18:58:40 JST 8s left Mon 2018-01-08 18:58:30 JST 1s ago TimerImage.timer TimerImage.service Mon 2018-01-08 20:08:31 JST 1h 9min left Sun 2018-01-07 20:08:31 JST 22h ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.servi Tue 2018-01-09 06:36:24 JST 11h left Mon 2018-01-08 06:47:50 JST 12h ago apt-daily-upgrade.timer apt-daily-upgrade.service Tue 2018-01-09 07:37:17 JST 12h left Mon 2018-01-08 18:28:22 JST 30min ago apt-daily.timer apt-daily.service