趣味の電子工作などの記録。時にLinuxへ行ったり、ガジェットに浮気したりするので、なかなかまとまらない。
RSS icon
  • NanoPi NEO2でタイムラプス撮影(続)

    投稿日 2018年 1月 8日 コメントはありません

    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