web-dev-qa-db-ja.com

現在のシェルのすべての祖先が死ぬとすぐに実行されるシェルスクリプトでタスクをスケジュールするにはどうすればよいですか?

ソフトウェアアップデート用のopkgパッケージを作成しています。

このパッケージは、インストール後に再起動する必要があり、次の再起動後にいくつかの作業を行う必要があります。

Postinstスクリプトにshutdown-hを追加しましたが、シャットダウンが早すぎるようで、opkginstallコマンドが中断されます。

その場合、opkg list-installedがインストール済みとしてパッケージをリストしないように、opkgシステムにはパッケージ情報が記録されません。

したがって、私が解決しようとしている問題は、OPKGパッケージのpostinstスクリプトでシャットダウン/再起動を確実にスケジュールする方法です。

しかし、基本的な質問は、現在のシェルのすべての祖先が死ぬとすぐに実行されるシェルスクリプトでタスクをスケジュールする方法ですが、それより早くはありませんか?

参照: postinstスクリプトおよびopkgパッケージ管理システムとは

1
user3528438

問題は明確に定義されていません。子から親へのプロセスのチェーンをたどると、最終的にプロセス1(init)に到達します。それが死ぬとき、それはシステムが再起動していることを意味します。

マシンの再起動は、アップグレードの一部として通常行われることではありません。管理者だけが、いつ安全に再起動できるかを知っているからです。アップグレード中に再起動することは間違いなく安全ではありません。 (はい、Windowsはそれを行います。これは、すべきでないことの輝かしい例です。多くのWindowsユーザーは、強制的なアップグレードによって再起動が発生したために作業が失われるという恐ろしい話をしています。)

アップグレードに参加する場合は、管理者にできるだけ早く再起動するように指示するメッセージを表示します。

アップグレードに参加しない場合は、自動アップグレードシステムに再起動を手配してもらいます。 yourアップグレードシステムのみが、特定の時間に安全に再起動できる特定の状況を認識しています。これは、サーバーでフェイルオーバーをアクティブにしたため、または組み込みデバイスが制御する生産ラインが停止したためです。アップグレードシステムはopkgを実行してから、アップグレードが必要かどうかを確認します。たとえば、ファイル/reboot_neededが存在する場合、(安全なときに)再起動する可能性があります。