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

Linux関連情報

QNAP:複数ドメインでSSL認証とBASIC認証の設定が面倒だったので

はじめに

QNAPで複数サイトを仮想ホストで立ち上げました。
その後、Let’s encryptでSSL認証を行ったのですが、5~6サイト以上設定しようとすると認証が取れない状態になってしまいました。
また、仮想ホストで指定したフォルダの場所が日本語(2バイト文字)を含むパスになっていて、どうにも.htpasswdの指定がエラーになってしまったので、その時の対処方法をまとめてメモします。

複数サイトを仮想ホストで準備する

多少説明を割愛します。
まず、Webサーバを準備するところから始めます。
QNAPのコントロールパネルを開くと、デフォルトでシステムポートに80ポートが使われていたりします。
この状態では、Webサイトで80ポートが使えず、後々Let’s encryptの設定が出来ません。
そこで、まずは、デフォルトのシステムポートを80以外(例:8080)にします。
同様に、HTTPS(SSL)のポート番号も443から別のポートに変更しておく必要があります。
こんな感じです。

コントロールパネル:システム


その後、コントロールパネル→アプリケーション→Webサーバで、Webサーバを有効にし、各ポート番号を変更してデフォルトの80ポートと443ポートが利用できる状態にしておきます。
こんな感じです。

コントロールパネル:Webサーバ

更に、「仮想ホスト」を有効にして、仮想ホストを画面の指示に従って設定します。
仮想ホストの対象フォルダは、NAS上のどこでも指定出来るみたいなので、自由度が高いのですが、それが後の後悔に繋がりました。
日本語(2バイト文字)を含むフォルダを指定したことで、後々苦労することになりました。
ちなみに、サイトを作成する際は、HTTPS(443)サイトだけを作るのではなく、HTTP(80)サイトも同じフォルダーを指定して両方作る必要があります。

Let’s encryptでSSL認証を行う。(失敗編)

複数サイトを構築する場合でも、2~3サイト/ドメインであればこの方法でも何とかなると思います。それでも面倒ですけど・・・

SSL認証を設定します。
お名前.comを利用して、ドメインを取得しました。
DNS認証にすれば良かったのですが、諸々の事情で複数のドメイン管理サイトでドメインを取得していたこともあり、安易にDNS認証やワイルドカードによる認証で回避が難しく、一つ一つ登録することを試みました。

コントロールパネル:セキュリティ

コントロールパネル→セキュリティ→証明書とプライベートキーから設定を行います。
Let’s encryptで認証を行う場合は、この「証明書の交換」を使用すると以下の画面が表示されます。

Let’s encryptで認証を指定
認証設定

ドメインには、DNSに指定したドメインを指定します。
メールは有効期限前の案内などが送られてきます。
「代替名(任意)」は、エイリアスですね。
複数サイトの認証を行う場合には、この「代替名(任意)」を利用して設定出来る様です。
但し、「ドメイン名」で指定できるのは1ドメインだけで、2つ目を「代替名(任意)」に指定することで認証が出来ました。
最初に1つだけ設定して、次に、1つ目に指定したドメインを代替名に指定し、新しい2つ目のドメインをドメイン名に指定する・・・これを繰り返すのか!?
でも、これを繰り返すしかないのか!?繰り返せば、もっと多くのドメインを登録できるのか?と戦々恐々としながらトライしてみました。

結論として、4~5ドメイン/サイトであれば登録出来ました。
その後、全く追加出来ない状態に陥ります。

尚、一つドメインを登録する毎に、QNAP画面のリロードを要求され最初の画面に戻ってから作業を繰り返すという面倒な仕様です。

やるならDNS認証だと思います!

きっと私の環境が悪いのでしょう。
本来であればDNS認証でDNSのTXTレコードを設定して・・・ということなのですよ。
でもね。TXTレコードを書けないDNSを併用していたため、どうにも逃げ道が無かったんです。
DNS認証の方法については、別の方が書かれているので他を参考にしてください。
気持ち的には、さくらの環境を使う方法が自動化も容易そうで羨ましいなぁと思いました。

Let’s encryptをマニュアルで!

結局ここなんですよね。
自動化は諦めました。
何方か自動化出来る提案があったら教えてください。
私の場合は環境の問題で無理ですが、お名前.comで認証出来ると嬉しかったなぁ~

さて、始めます。
Let’s Encryptを利用できるよう準備します。
たくさん書いている人がいるので、環境構築はご自由にしてください。
私は、適当に空いてたCentOSの仮想マシンを使いました。
きっと、認証専用マシンになるでしょう・・・(TT)

こんな感じです。

ここで、「Press Enter to Continue」を見てエンターキーを打ちたくなりますが、まずサイトが保存されいている場所に上のBで指定されているファイルを作成する必要があります。

こんな感じでファイルを作ります。

作り終わったら、エンターを押して次に進みます。

認証したいドメイン数分これを繰り返すことになります。

失敗した場合には認証が行われませんが、再度同じコマンドを実行したり、ドメインを追加して実効する際には、前に認証されているドメインは省略してくれます。

とは言え、失敗を繰り返すとLet’s encrypt側から一時的に認証を拒否される場合もありそうなので、失敗しない様に心がけましょう。

最終的に、以下のコメントが表示されます。

/etc/letsencrypt/live/xxxx.site(xxxx.siteには対象のドメインが示されます。)に認証ファイルがシンボリックリンクされて作成されます。

QNAPに認証ファイルを登録する。

先程作成した認証ファイルをQNAPに登録します。

失敗時?と同じように、QNAPのコントロールパネル→システム→セキュリティ→証明書とプライベートキーで「証明書の交換」をクリックし以下の画面を開きます。

証明書の交換:インポート
証明書のインポート

証明書のインポート画面で先ほど作ったファイルを登録します。
それぞれ以下の様になります。

証明書      :  cert.pem
プライベートキー :  privkey.pem
中間証明書(任意):  chain.pem

中間証明書が必要だったかどうかまでは知りません!
ここまで来て失敗するのが面倒だったんです!!

適用をクリックして、何も表示されるずに終了し、「リロード」を促されたら成功です!
再度最初の画面に戻ってください。

証明書の取得および登録は以上で完了です!お疲れ様でした!!

とはならないんですよね。。。。
まず、この状態では、HTTPでアクセスするとそのままHTTPアクセスが維持されます。
HTTPSでアクセスすれば当然HTTPSでアクセスされます。
ドメイン認証された方には判ると思いますが、自動でHTTP→HTTPSの変換/リダイレクトはやってくれません。
自分で書く必要があります。
サイトのトップに.htaccessを記載します。
好みもあると思いますが、簡単にこんな感じです。

説明は省略しますが、HTTPSじゃないアクセスがあったら、httpsに変えてアクセスしなおすことになります。

BASIC認証

BASIC認証では、.htpasswdの場所を.htaccessにフルパスで指定する必要がありますよね。
QNAPだとそのフルパスが良く分からなかったんです。

なんかググると、頭に「/share/を付ければなんとかなるみたいなんですけどね。
確かにその通りだったんですよ。でもね。日本語(2バイト文字)を含む場合は、Windowsで編集したりしてもどうにもダメだったんですよ。

で、諦めて半角文字だけパスの所にパスワードファイルを纏めようか?なんてことも考えましたが、気が付いたんです。これですね。

sshでQNAPへログインします。
中身はLinuxです。
/shareの下に見覚えのあるフォルダが並んでいるかと思います。
そこから適当に該当するサイトのファイルが保存してある場所を探して、直接viで.htaccessを編集することで、正しくパスを指定することが出来ます。

それと、理由は解りませんが、/dev/nullを指定できませんでした。
これがエラーになるみたいなんですよね。なんでだろう?削って大丈夫かな?と少し不安もありますが、取り敢えずは動いてるから様子見です。

これで終わりです。

証明書の更新は・・・多分、証明書を作成したマシンでcertbot renewってやって出来上がった認証ファイルを定期的にアップロードして更新してやることで解決するでしょう!!(期待)

本気で終わり!
長かった~(^^♪

ディスク復旧:マウントできない(TT)

CentOS 7の環境でOSとデータでディスクを分けていたのですが、OSのディスクが吹っ飛んでしまい、データだけでも抜き出そうと別のCentOSの環境にディスクを繋いでマウントしようとしたのですが、マウントが上手く出来無い現象に見舞われました。

初めて繋いだディスクですからマウントしているわけもなく、ネットをググりましたが、なんか見当違いの回答ばかりで最終的に行き着いたのがこの方法です。

まず状態を確認します。

sda1の下にddf1〜が存在します。
このddf1〜が邪魔をしていた様です。
このddf1〜は繋いだ際に勝手に作られるらしく、削除しても自動的に作成されます。
と言うことで削除しても問題なさそう!
削除します!

削除する順番は、ぶら下がっている子どもから順番に削除します。

この後、マウントすると上手くマウントできました。

mount /dev/sda1 /mnt/hdd/

ちなみに、最後になりましたが、/mnt/hddのディレクトリは事前に作っておきます。

これは思い出せないわ!ということで、メモです。

CentOS 8:postgreSQL 12 + Python

前回のpostgreSQLインストールでドタバタしたのも束の間、psycopg2がインストール出来ない!?

postgreSQL 12のインストールは前回を参考にしてください。

pg_configが使えない?

それでもだめなので、.bashrcにパスを追加

それでも、gccが無いと怒られたので

 これでもか!ということで

最後良く分からないけど、なんかできた!

CentOS 8 にpostgreSQL 12を入れる!postGIS 3.0も入れる!やばかった~(TT)

#なんか文字フォントが変わっている気がするけど、気にしない。

さて、CentOS 8にpostgreSQL 12.xをインストールしようと思い立ちました。

インストールばっかりしているけど、きちんと使ってるんですけどね。
使った結果を出すのが面倒なんですよね。
守秘義務とかあってですねぇ(^^;

ということで、インストール手順ですが、まずはリポジトリをインストールします。

で、何を入れるの?みたいな感じになったんですよ。
本家に行けば良かったです。以下のサイトに行ってみます。

https://www.postgresql.org/download/linux/redhat/

少し下の方にある項目に必要事項を入力します。

4番目の項目にdnfのコマンドが記されているので、それをコピーして実行するだけです。
こんな素晴らしいものがあったことを知りませんでした(TT)
ありがとう!!!と感謝しながら、続けます。
まずは、リポジトリの追加を行います。

ビルトインのpostgreSQLを無効にします。

postgreSQL 12をインストールします。

続いて、サーバをインストールします。

最後に、データベースの初期化を実施し、OS起動時における自動起動の設定を行います。(後でも大丈夫)

postgreSQLのデータベース保管場所を変更します。

デフォルトのままでも良いという方は読み飛ばしてください。

データベースが肥大化すると場所の移動が面倒になりますので、予め、どこか適当な場所にパーティションを切って移動しておくと楽です。
今回は、特にパーティションの設定にまでは言及しませんでしたが、OSインストール時に決められなった場合には、後々ストレージを増設することを想定した対応を行っておくと便利です。

今回は、/data/DBの下に作ることとしました。

サービスの変更を行いましたので、デーモンの設定をリロードしておきます。

以下のコマンドを実行してデータベース環境を初期化します。

問題なければこんな感じになるはずです。

# more /data/DB/PG_VERSION
12

postgreSQLを起動する準備です。

それと、データベースの場所を変更していますので、以下の設定を行います。

これで、postgreSQL 12の設定は完了です。
それでは、postgreSQLを起動してみます。

設定は完了しているので、rootユーザに戻り以下のコマンドを実行します。

確認します。

Active:active(running)となっていれば、正常に動作開始していますね。

postGISのインストール

postGISをインストールします。
postgreSQLのバージョンとpostGISのバージョンには、相関関係があります。
まずは、相関関係を確認します。

下記のURLで対応状況を確認します。

https://trac.osgeo.org/postgis/wiki/UsersWikiPostgreSQLPostGIS

対応表(抜粋)

見難い人は、直接上記URLで確認してください。
postgreSQL 12に対応したpostGISは2.5以降であることが判ります。

インストール対象を確認するために、一度リストを表示させてみます。

postgis30_12.x86_64が最新の状態で使えそうです。

インストールしてみます。

エラーがズラリと表示されました。
必要なパッケージがインストールされていないと怒られています。依存関係でクリアしてくれないみたいです。

そこで、それぞれ一つ一つインストールをクリアしようと思ったのですが、全く進みません。

半ば諦めてバージョンを戻そうかと悩んだんのですが、どうもそれでも上手く行かないみたいな話がちらほら・・・
CentOS 8を諦めるかどうしようか悩んでいたのですが、クリアしました!

これでどうじゃ!

多分これで行けます!
ダメだったら、libdapとかgdal30を–nablerepo=PowerToolsを追加して実行してからインストールしてみてください。

多分、これで行けたはず!
ダメだったら泣いてくださいm(__)m

CentOS 8 conflicting requests

CentOS 8.1911 をインストール後にアップデートを実施してからだと思うのですが、dnfを実行するとconflicting requestsと表示される様になりました。

対象モジュールをインストールしてみるも、既にインストールされていると言われる始末。

解決策が判らず困っていたところです。

以下のコマンドを実行することで解決しました。

単なるバグだな。

CentOS 8 インストール後にやったこと

定番ですが

毎度のことですが、CentOS を入れたら、まずyum updateをやりますよね。
今回は、CentOS 8なのでdnf使うだけですね。

アップデートは最初にやっておきましょう。

続いて、こちらも定番です。
EPELを使えるようにしておきましょう。

シェル周りも自分好みに合わせて

コマンド補完

コマンドライン上での文字補完を有効にします。

これで終わり。
次回ログイン時から有効になります。

CentOS 7までは別途インストールの必要がありましたが、bash-completionはデフォルトでインストールされていました。

aliasも少し変更

好みに合わせて変更します。
こんな感じの設定を追加します。

日本語フォント

うーん?ipaのフォントをインストールしようと思ったんだけど、見つからない。何故だろう。

課題にしておきます。

なんか入れるものがないので、おまけ

画面キャプチャとかした時に、画像を少し編集したいという時に使ったりするので、gimpを入れておきます。

Pythonは

「python」コマンドは存在せず、「python2」と「python3」がインストールされていました。
他にはこんな感じでインストールされていました。

python3のバージョンは、これ

なんかやることなくなっちゃった感じですが、インストール後の手間が少し楽になった気がします。

CentOS 8 インストール!pane is daed !? で嵌った人も大丈夫!!

本記事に辿り着いた方に、本記事では、CentOSのインストールそのものに関する記載を行っておりません。
CentOS 8のインストールを実施しようとして、以下で説明する事象が原因でインストールが実施出来無い人向けの案内になります。
CentOS 8のインストールそのものは、従来のCentOS 7以前で行っていた要領と変わりはありません。

VMware Workstation Pro 1.5 にCentOS 8.1911をインストールしようとしています。
ダウンロードに相当な時間を費やして、やっとダウンロードが終わり、さてインストールしようと起動したところ以下の画面で終わりました。

Pane is dead

画面下の方に「Pane is dead」と表示されて終わっています。

海外のサイトには対策が書かれているのですが、実際面倒な感じです。
たまたま見掛けた資料で、これが手っ取り速く出来そうなので試してみました。

ついでなので、インストール手順から始めます。

まずは、公式サイトからISOイメージをダウンロードしておきます。
公式サイト:https://www.centos.org/

VMwareの画面上で、「New Virtual Machine Wizard」を選択し、インストール設定を進めます。

「Typical」でも「Custom」でもどちらでも良いのですが、今回は「Typical」で作業を進めます。

次の画面では特に変更をする必要がなければ、そのままNextで次へ進みます。

先程ダウンロードしたISOイメージを起動時に使用するよう指定します。

ここでユーザ名とパスワードを聞かれるのですが、実際意味はありません。
適当な名前とパスワードを入力しておけば良いようです。
(多分、使われません)

仮想マシンを管理するための名前と、そのファイルを指定します。
ご自身の環境に合わせて記載してください。

仮想マシンに割当てるCPUコアを指定します。コアの数と同時実行のスレッド数を指定するようなイメージですね。Total processor coresが仮想CPU数と考えるとしっくりくる感じですね。

仮想マシンに割当てるメモリ容量を指定します。
最初なので、2GBを指定していますが、後で変更することが可能です。

ネットワークアダプタの設定をしています。
通常のPCだと、物理的なソケット(LANコネクタ)の数は1つだと思いますが、仮想OSが使用する場合、そのソケットをどういう風に繋ぐかを決める必要があります。
VMwareでは、仮想OSにも独自のIPアドレスを与え、且つ、外部とのインタフェースも実現しようとする場合、ブリッジ接続が良いようです。

VMwareのネットワーク設定にはいろいろとあるので、それは別途調べてみると良いでしょう。ここでは、省略します。

ストレージの接続をしてしています。
あまり気にせずに設定しました。

こちらも同様です。オススメに従いました。

仮想マシンを複数のファイルで構成するか、それとも1つのファイルで構成するかを問われています。

用途に依って違いがあると思いますが、シンプルにシングルファイルで構成することにしています。

仮想マシンのファイル名を指定しています。
適当に指定すれば良いでしょう。

最終確認です。間違いがなければ続行しましょう。

起動が開始されインストーラが起動します。

ガーーーーン!
止まってしまいました。
多分、ここを訪れる多くの方はこの問題に捕まったのではないでしょうか?
インストールなんて、インストーラ起動したら後はどうにでもなりますからね(TT)

同士の皆さん、ここからです!

本ページの最初でもお伝えしたように、「Pane is dead」と表示されて画面が固まっています。ここから先に進むことが出来ません。

この問題に引っ掛る方は、VMwareのユーザに限定される可能性が高いです。
実際、VirtualBoxや実際のマシン(Phisycal Machine)では発生していないはずです。

初期段階で設定を変更出来たのかも知れませんが、ここで一度パワーOFFをします。

Pane is dead

VMwareの画面で、「Edit virtual machine settings」を開き、設定変更を行います。

「CD/DVD」が2つ登録されていることが分かります。

この不要な「CD/DVD」が悪さを引き起こしている原因です。
こいつを削除します。

再起動してみましょう。

出ました!CentOS 8のインストーラを起動させるための画面が表示されました!!

後は、従来通りにインストールを進めるだけです。
CentOS 7以前のインストールを体験されている方であれば、何等の変更も無いように感じるでしょう。

ということで、以下省略します!

ISOイメージのダウンロードを速くしたい!

OSのISOイメージとかダウンロードしようとして、5時間とか6時間とか・・・えぇ~!今日インストールしたいんだけど!!!!!!

そんな経験ありますよね。

今回は、CentOS 8のISOイメージをダウンロードしようと思ったのですが、そんな状況に陥りました。

なんかあるよね・・・とググると、やはりありました!
aria2を使うと劇速!

あちらこちらのミラーサイトを試してみていたのですが、wgetだと5~6時間くらい掛かる感じです。
今までは、回線が細いからダメなんだろうな。。。とか思っていたのですが、そうでもないみたいな感じ。

CentOS 7.1908は4.3GBだったのに、CentOS 8.1.1911では7.0GBと大幅ボリュームアップ!
普通に買い物する時ならボリュームアップは大歓迎なのですが、増えて困るのがダウンロードサイズ(TT)

以前、知り合いから超ドデカいファイルをダウンロードしたいんだけど、なんかやり方無いだろうか?と聞かれて、調べたことがあったのを思い出しまして、調べた結果がこいつです。

aria2は標準でインストールされていないようなので、インストールします。

これで準備完了です。

いきなりですが、こんな感じでダウンロードしてみました。

# aria2c -x10 -s10 -k1M http://mirrors.cat.net/centos/8.1.1911/isos/x86_64/CentOS-8.1.1911-x86_64-dvd1.iso http://ftp.riken.jp/Linux/centos/8.1.1911/isos/x86_64/CentOS-8.1.1911-x86_64-dvd1.iso http://ftp.tsukuba.wide.ad.jp/Linux/centos/8.1.1911/isos/x86_64/CentOS-8.1.1911-x86_64-dvd1.iso http://ftp.jaist.ac.jp/pub/Linux/CentOS/8.1.1911/isos/x86_64/CentOS-8.1.1911-x86_64-dvd1.iso http://ftp.yz.yamagata-u.ac.jp/pub/linux/centos/8.1.1911/isos/x86_64/CentOS-8.1.1911-x86_64-dvd1.iso http://ftp.nara.wide.ad.jp/pub/Linux/centos/8.1.1911/isos/x86_64/CentOS-8.1.1911-x86_64-dvd1.iso http://ty1.mirror.newmediaexpress.com/centos/8.1.1911/isos/x86_64/CentOS-8.1.1911-x86_64-dvd1.iso http://ftp-srv2.kddilabs.jp/Linux/packages/CentOS/8.1.1911/isos/x86_64/CentOS-8.1.1911-x86_64-dvd1.iso http://mirror.fairway.ne.jp/centos/8.1.1911/isos/x86_64/CentOS-8.1.1911-x86_64-dvd1.iso http://ftp.iij.ad.jp/pub/linux/centos/8.1.1911/isos/x86_64/CentOS-8.1.1911-x86_64-dvd1.iso

オプションの説明は、–helpで調べてみてください。

回線が細いこともあり30分弱でダウンロードしましたが、回線が太ければもっと速くダウンロード出来るかも知れません。

ビックデータのダウンロードとかでも使えそうなので、今後の参考にしたいと思います。

ffmpeg 複数インタフェースカードの対応

複数のNICが搭載されたサーバマシンで、マルチキャストで配信されているストリーミング映像を受信しようとして、ガッツリと嵌りました。

環境

環境は以下の感じです。

マシン環境

OSCentOS 7.7.1908
NIC5枚 (利用したのは2枚だけ)
eth0〜eth5がある状態でeth0とeth1だけ使用。
(「eth?」は環境によって違うので適当に読み替えてください。)

ネットワーク

ネットワーク環境について説明する。
今回の環境では、ネットワーク1とネットワーク2がある。
ネットワーク1は、インターネットなど外部環境と接続している。
ネットワーク2は、マルチキャストで映像配信が行われており、その映像をキャプチャし、映像処理を施した後にネットワーク1側で提供する。

課題になった現象

今回、課題になった現象は、eth0側の通信は出来るのだが、eth1側からffmpegによる映像キャプチャが出来ないという現象が発生した。

色々と調べてみたのだが、eth1側のマルチキャストをルーティングにテーブルに設定することでキャプチャが可能になるように記載があちらこちらで見受けられたのだが、実際にはそれだけではダメだった。

解決策

このままのネットワーク構成でも実現できる可能性はあったが、結局は、eth0側のデフォルトゲートウェイによりマルチキャストの受信を行おうとしいて受信できない状態になっていると理解した。

そこで、eth0とeth1を入れ替えた。

ここでも問題が生じた。
新たにeth0となったネットワーク2側のデフォルトゲートウェイにより、外部との通信が遮断されてしまったのだ。
外部のアドレスは不特定なため、簡単にルーティングテーブルを指定することが困難であると判断し困惑した。

問題は、本来、ネットワーク1側のゲートウェイを介して外部に接続しなければならないのにも関わらず、ネットワーク2側のゲートウェイで捕捉されてしまい、ネットワーク1側に流れないということと判断した。

そこで、ネットワーク2側のデフォルトゲートウェイの設定を削除した。

次に行ったことは、ルーティングテーブルに224.0.0.0/4を登録した。

ここでも嵌った!

ドキュメントでは、/etc/sysconfig/network-script/route-eth0に以下の様に記述する方法があり、ネット上でもその記載方法が記されていた。

T.B.D

しかしながら、その設定ではなく、別の方法による記述が求められた。

ちなみに、ip routeコマンドでルーティングを/etc/rc.localに記載したのだが、起動時にコマンドを実行しても、ルーティングテーブルを確認すると設定が行われていない状況であった。

GUIを用いて、以下のルートを指定した。
<<<<現状はメモ状態なので、近日中に更新予定>>>>

224.0.0.0/4 ゲートウェイは0.0.0.0

これで上手く通信が出来るようになった。

以上でも問題解決が出来た。
ffmpeg自体はNICの指定が出来ないことから、無理やりするには色々と課題があるようだ。
環境を構築して、確認を行うことをお勧めする。

ファイルやディレクトリの変更をトリガーにしてプログラムを起動する。incronがダメなら、inotifyで!

ファイルやディレクトリを監視したい!

ここでも過去に取り上げていますが、incronを用いて任意に指定するファイルやディレクトリの更新を監視することが出来ます。
ところが、incronは何度かバグが発生し、且つ、メンテナンスが遅れ遅れになっていることもあり、利用することを断念しました。

systemdでサポートされているinotifyを利用する手段が次に出てきた訳ですが、当初は情報も少なくて困ったものです(^^ゞ

というところで、CentOS 7上のPython 3で利用できるか確認してみました。

結論としては、Python 2.xと比較して、ほぼデフォルト状態のPython 3で利用することが出来ました。

どんなイベントを監視できるのか?

いろんなイベントを監視できるので、詳細についてはmanで確認できます。

サンプルコード

ここで示すサンプルコードでは、指定したディレクトリ内に含まれるファイルもしくはディレクトリ移動した場合にイベントが発生します。

サンプルコードを以下に記します。

maskにpyinotify.IN_MOVED_TOを指定することで、ファイル/ディレクトリの移動を監視しています。
IN_MOVED_TOをIN_CREATEにすれば、ファイル/ディレクトリが生成されたタイミングでイベントが発生します。
ディレクトリを指定した場合には、対象ディレクトリ以下のサブディレクトリも監視対象となります。
ただし、監視中(プログラム起動後)に新たに設置されたフォルダー内部は監視対象にならないということに注意が必要です。
syslogにログを残す機能も併せて盛り込んでしまいました。

意外と簡単ですよね。