Linux で次のようなシステム イベントをキャッチする必要があるアプリケーションを作成しています。
- システムの再起動
- ユーザー「xyz」がログイン
- 「xyz」アプリケーションがクラッシュするなど。
それに基づいていくつかの機能を実行する必要があります。例:
- バックアップ スクリプトを実行する
- 回復プログラムなどを実行します。
C/Linux でシステム イベントをキャッチする方法を教えてください。
PS: ここでは「ファイル システム」イベントについて話しているわけではありません:P
「システムイベント」の概念はありません。処理する必要のあるイベントを指定し、それぞれを処理するための適切なメカニズムを実装する必要があります。
システムの起動:init
プロセスは、起動時にスクリプトを呼び出します/etc/init.d
。正確なインフラストラクチャはディストリビューション間でわずかに異なりますが、Linux Standards BaseSystemInitializationは通常すべてで機能するはずです。
ユーザーのログイン/ログアウト:LSBは、PluggableAuthenticationModulesライブラリへのインターフェイスも定義します。ログイン中に呼び出される共有ライブラリ(および認証と承認を必要とするその他のアクション)を実装できます。やりたいことによっては、あなたのために働くモジュールがすでにあるかもしれないので、最初にそれを探してみてください。どちらの場合も、ディストリビューションに依存しないインストール方法はないと思います。特定のディストリビューションでも、管理者がカスタム変更を行った可能性があることを考慮する必要があるため、インストールには管理者による手動の介入が必要になります。
アプリケーションのクラッシュ:インストルメント化する必要があります。
システムログの読み取りを検討する必要があると思います-質問することはすべてsyslogに記録されます(標準構成の場合)。システムで syslog-ng を使用している場合は、プログラムに直接書き込むように構成することもできます。詳細については、 http://www.syslog.org/syslog-ng/v2/#id2536904を参照してください。しかし、他の syslog デーモンを使用しても、/var/log からファイル (またはファイル) をいつでも読み取ることができtail -f
、特定のメッセージに反応して終了することができます。
アプリケーションのクラッシュをキャッチすることについてはわかりません-ユーザープロセスのすべてのSIGSEGVをログに記録するカーネルオプションがありますが、知る限り、ARMアーキテクチャでのみ使用できます-最後の手段は、アプリケーションを計測して(Jan Hudecが指摘したように)何かをログに記録することですシスログに。