Linux」カテゴリーアーカイブ

Raspberry PiでPythonスクリプトを自動起動する

Raspberry Piで特定のスクリプトを動かすだけの場合、本体に電源が入った際にスクリプトが自動的に実行されると便利です。Windowsではスタートアップという方法がありますが、Raspberry PiのOSはLinux系なので今回勉強のために調べてみました。

systemd のユニットファイルの作成および変更

[Red Hat documentation]

systemdを使用したシステム・サービスの管理

[Oracle]

大ざっぱに言えば、/etc/systemd/system 内にスクリプトをサービスとして登録するためのユニットファイルというファイルを作成します。実行するスクリプトや実行ルールはこのファイル内に定義するようです。

そうするとファイルがサービスとして実行可能になるので起動時に実行されるように設定すれば良いようです。さっそくやってみました。

ユニットファイルの作成

ユニットファイルはそもそも存在していないので、新しく作成します。今回はhoge.serviceというファイルを新規に作成します。

<ターミナル>
cd /etc/systemd/system/
sudo vim hoge.service

Vimが入っていない場合は以下のコマンドでインストールできます。

<ターミナル>
sudo apt-get install vim

そうすると空の状態のhoge.serviceがエディタで開くので以下の内容を入力していきます。

[Unit]
Description=hoge

[Service]
ExecStart=/usr/bin/python3 /home/pi/hoge.py
Restart=Always

[Install]
WantedBy=multi-user.target

それぞれの項目の説明です。

Unit部については単なる説明書きです。

Service部でユニット開始時に実行するスクリプトの場所を指定します。今回はスクリプトがPythonなのでPythonのパスとスクリプトのパスをあわせて記述しています。Restart=Alwaysを記述しておくことでスクリプトが終了してしまったときに自動的にスクリプトを再起動することができます。

最後のInstall部がちょっと分かりにくいところです。”multi-user.target”にすることで ネットワーキングを使用するが、ディスプレイマネージャーは使用しない という設定になるそうです。画面表示のない電子工作用のスクリプトであればこれで問題ないと思います。

入力ができたら保存してエディタを閉じます。

起動時に実行する設定

サービスが登録できたので後は起動時に実行されるように設定をします。

<ターミナル>
sudo systemctl enable hoge.service

これで起動時にhoge.serviceが実行されるようになります。

SQLiteからCSVデータを出力する

以前Raspberry Piを使って部屋の温度を定期的に取得するデータロガーのようなものを作りました。

結構長い期間データが溜まってきているので、データを分析してみたくなりました。SQLiteはそのままだとまさにデータベースなので、表計算ソフトなどで簡単に扱いにくく感じます。一応ODBC接続をすればデータ読み込みができるらしいのですが、それも面倒なので今回はSQLiteからCSVデータを書き出してみることにしました。

この作業はデータベースそのものをWindowsにコピーして実行するよりも、Raspberry Pi上でSQLiteの機能を使ってエクスポートするのが簡単です。

手順としては以下の画像の通りです。箇条書きにすると、

  1. 事前にデータベースファイルのあるディレクトリにcdコマンドで移動する
  2. SQLiteを起動し、目的のデータベースを開く
  3. .headers on で出力するファイルのヘッダー行を表示するように設定する
  4. .mode csv でCSVファイル出力をオンにする
  5. .output [任意のファイル名].csv で出力するファイル名称を設定する
  6. SQL文を入力すると設定の通りにcsvファイルが発行される
  7. .quit でSQLiteを抜ける

このような手順になります。あとはcsvファイルを任意の環境に移動させて利用します。

Raspberry Pi 4BをミニPCとして利用する

今回メインのPCが故障した際の代替機としてRaspberry Pi 4Bを使いました。
これは以前室温センサーを組み立てたときの開発機として購入したものです。
本番のハードウェアは別途購入したRaspberry Pi Zero WHなので、開発機は開発完了後使っていませんでした。

OSを入れるところから久々の登板でしたが大活躍でした。

一応スマートフォンもあるとは言え、できればキーボードと大きい画面が使える端末が代替機としては望ましいので、検証も兼ねてミニPCとして利用可能かどうか試してみました。

以前開発に使っていた時はやはり動作が緩慢な感じがしたので遅いのは仕方ないかと思っていましたが、今回試してみたところパフォーマンス面は大幅に改善しているように感じられました。OSがアップデートされて64bitARMに対応したことにより、以前より高速に動作するようになったそうです。

特に助かったのが動画の再生で、動画配信サービスで提供されている720p以上の高解像度の動画であっても特にカクカクすることもなく問題なく再生ができました。とりあえずWebブラウズと動画の再生だけでもできれば予備機としては合格点ではないかと思います。

少々気になったのはChromiumで日本語入力ができなかったことです。同時に入っていたFirefoxは問題なかったのでChromium側に原因がありそうですが、その点だけが不足でした。

デスクトップPC比で消費電力も非常に少なく、騒音もほとんどゼロに近いので、緊急時だけでなく普段使いもできそうな可能性を感じました。

GpartedによるHDDの修復

データが読み出せなくなってしまったというHDDをダメ元で良いので復旧できるか試してみてほしいということでお預かりしました。確かにWindowsで読み込もうとするとデバイスマネージャーでは認識するのですが、未フォーマットのボリュームとして認識され、データにはアクセスできないようでした。

一応認識はするのでUbuntuを搭載したPCに接続し、Gpartedというパーティション管理ツールで修復ができないか試してみました。

GNOME Partition Editor

[gparted.org]

GpartedはGUIツールなのでLinuxに慣れていない場合でも使いやすく、”Attempting Data Rescue”というデータ救出の機能があるので、これが手軽に使えます。

試してみたところ最初はUbuntuでもマウントできなかったHDDが無事にマウントできるようになりました。一部データに破損があったので100%完全にデータを救えませんでしたが、大部分は回収して別のストレージに移すことができました。

Windows環境ではどうしようもなさそうに感じるストレージの故障も、Linuxを使うと意外にどうにかなることがあります。困った時には結構助けられています。

Raspberry Piのユーザーパスワードを再設定する

室温のロギングに使っているRaspberry Piのメンテをしようと思い、Windows付属のリモートデスクトップを使用してログインを試行しました。しかし、ID・パスワードとも正しいもののはずなのになぜかログインができず困りました。

通常使用のユーザーではなくrootであればログインできたので、rootでログインしてターミナルで sudo passwd [ユーザー名] と入力してパスワードを再設定して解決となりました。

非管理者のユーザーでpasswdコマンドを使うと現在のパスワードを入力した上で新しいパスワードの設定を行うことになりますが、管理者権限のあるユーザーであればそこからのsudo passwdで新しいパスワードのみを再設定できるので、こういう困った場面では便利です。

Fedora20をVMwareで

ファイルサーバ機が壊れてしまったので家からLinuxマシンがなくなってしまいました。
たまに操作を思い出す意味でも触りたくなるので、仮想環境を作ってみることにしました。
140527_01
仮想環境のFedoraで表示した当blogの様子です。

Linuxはフォントの感じが優しくてそこが好みです。
常々「Linuxを常用したらどこが問題になるかな?」というのは心配しますが、こればっかりは実際に運用してみないと問題点も出てこないかも知れないですね。

バックアップとフォルダの整理

天気も悪かったので久々にバックアップに使っているNASのフォルダ構成を見直しました。
この手の作業は悪天候の休日に限ります。

やはりどうしてもファイルは自分好みの方法で整頓しておかないとなんだか居心地が悪く感じてしまいます。

最初NASにアクセスできなかったのでRPから製品版になって何か変化があったかとしばらく悩みましたが、NAS側でsambaのサービスが動いていないだけでした。

Hyper-VとLinux

せっかくのHyper-VだしLinuxの対応はどうかなと思ったら結構入れられるものもあるようです。

REHLとCentOSについてはLinux向けの統合サービスが提供されているので、おすすめはこの2種ということなのでしょうか。

一応ファイル置き場にFedoraが入っているのでLinuxを触りたいときはそれでもいいんですが、たまにはちょっと違うのを試してみたいなと思うこともありますんで…

Hyper-V自体は非常に優秀のようですので、Win8に入っているのはなかなか心強いです。

Fedora16ファイル置き場完成

いろいろありましたがOSの入れ替えが完了しました。

Fedora14以前ではSambaのサービスを動かす時に、

/etc/rc.d/init.d smb start

とかこんなコマンドで起動していたのですが、Fedora16から?(この辺ちょっと不確実ですが)サービスの起動はsystemctlで行われているんだそうです。

なのでコマンドは

systemctl start smb.service

という風に変わっています。

後今回もSELinuxの設定を忘れてしばらく苦しみました。

原因はGnome3.2?

なぜかUSBメモリからLiveインストールできない問題ですが、どうもGnomeデスクトップ版が原因のようでした。
エラー自体はFedoraのインストールプロセス中に

there was an error installing the live image to your hard drive.
this could be due to bad media.please verify your installation media.

という「インストールメディアが壊れてるのでは?」というエラーでした。
エラーメッセージで検索するとやはり「ファイルが壊れてるかもしれないからISOを検証してみては?」というまっとうな回答が出てくるのですが、Live起動した際にGnomeがエラーを表示するのが気になっていたのでLXDE版を試したところこちらは普通にインストールできました。

Gnomeの何が良くなかったのかは謎のままですが、とりあえず原因がデスクトップ環境の種別にあったのは間違いないようです。