12

Linux (Fedora 9) コンピュータのバックグラウンドで毎日実行されるバックアップ スクリプトがあります。バックアップの進行中にコンピューターがシャットダウンされると、バックアップが破損する可能性があるため、ユーザーがコンピューターを再起動またはシャットダウンする機能を一時的に無効にする小さなスクリプトを書きたいと思います。

スクリプトが回避不能である必要はありません。これは、システムのユーザーに、バックアップが進行中であり、シャットダウンしてはならないことを知らせるためのものです。DBus Free デスクトップの電源管理仕様で Inhibit メソッドを見てきました: http://people.freedesktop.org/~hughsient/temp/power-management-spec-0.3.html が、システムがアイドル状態の場合にのみシャットダウンを防止します。ユーザーの要求で明示的にではありません。

C/Python/Perl または bash でこれを行う簡単な方法はありますか?

更新:上記の質問を明確にするために、それは複数のユーザーがいるマシンですが、プラグインされたキーボード/マウスを介して順番に使用します。私は、ルートとしてシステムを「ハッキング」するのを止めるようなシステムを探しているわけではありません。しかし、Gnome/GDMメニューからシャットダウンを選択したときにバックアップがまだ実行中であることを私(または別のユーザー)に思い出させるスクリプト

4

6 に答える 6

8

もう 1 つの手始めの解決策: シャットダウン中に、システムは /etc/init.d/ 内のスクリプトを実行します (または、実際には /etc/rc.*/ 内のスクリプトですが、おわかりでしょう)。バックアップのステータスをチェックし、バックアップが完了するまでシャットダウンを遅らせるスクリプトをそのディレクトリに配置します。またはさらに良いことに、バックアップを適切に中断します。

スーパーユーザーはこのスクリプトを (たとえば /sbin/halt を使用して) 回避することができますが、スーパーユーザーが本当にやりたいと思っているのであれば、スーパーユーザーが何かをするのを防ぐことはできません。

于 2008-11-26T22:12:14.623 に答える
5

必要なすべての条件が満たされるまで、偶発的なシャットダウン、再起動などを防ぐためのモリーガードがあります。条件は自己定義できます。

すでに提案したように、シャットダウン プロセスの一部としてバックアップ操作を実行することもできます。たとえば、このページを参照してください。

于 2013-05-19T13:27:26.150 に答える
1

あなたが Unix の比喩をよく理解していないように感じずにはいられません。

ユーザーが root として実行している場合、root がシステムをシャットダウンするのを止めるために root ができることは何もありません! シャットダウンUIを隠すなどのウィンドウドレッシングを行うことはできますが、それは実際には何も達成していません.

マルチユーザー マシンのコンテキストでこれについて話しているのか、それとも単一のユーザーがコンソールに座っている「デスクトップ PC」として使用されているマシンのコンテキストで話しているのか、私にはわかりません。前者の場合、ユーザーは、日常の活動のためにシステムをシャットダウンできる資格情報を使用してマシンにアクセスするべきではありません。後者の場合は、(a) スクリプトが実行されていることを確認するか、(b) 指定した特定のシャットダウン スクリプトを使用して、スクリプトのプロセスをチェックし、それがなくなるまでシャットダウンを拒否するようにユーザーを教育することをお勧めします。

于 2008-11-26T22:12:05.293 に答える
1

完全な解決策というよりは入門的なものですが、shutdown コマンドにエイリアスを設定してから、次のようなスクリプトを使用できます。

#!/bin/sh
ps -ef|grep backupprocess|grep -v grep > /dev/null
if [ "$?" -eq 0 ]; then
 echo Backup in progress: aborted shutdown
 exit 0
else
 echo Backup not in progress: shutting down
 shutdown-alias -h now
fi

shutdown としてユーザーのパスに保存されます。ユーザーがシャットダウンを呼び出す方法 (ウィンドウ マネージャー アイコン/コマンド ライン) や、おそらくさまざまなディストリビューションに応じて、いくつかのバリエーションがあると思います。

于 2008-11-26T21:58:45.397 に答える
0

しかし、Gnome/GDM メニューからシャットダウンを選択したときにバックアップがまだ実行中であることを私 (または別のユーザー) に思い出させるスクリプト

polkit を使用してシャットダウン/再起動を完全にブロックすることもできますが、ブロックされている理由を明確に示す方法が見つかりませんでした。

次の行を追加すると/etc/polkit-1/localauthority/50-local.d/restrict-login-powermgmt.pkla機能します。

[Disable lightdm PowerMgmt]
Identity=unix-user:*
Action=org.freedesktop.login1.reboot;org.freedesktop.login1.reboot-multiple-sessions;org.freedesktop.login1.power-off;org.freedesktop.login1.power-off-multiple-sessions;org.freedesktop.login1.suspend;org.freedesktop.login1.suspend-multiple-sessions;org.freedesktop.login1.hibernate;org.freedesktop.login1.hibernate-multiple-sessions
ResultAny=no
ResultInactive=no
ResultActive=no

確認ダイアログは引き続き表示されますが、確認するボタンはありません。見た目は悪いですが、機能します;)

残念ながら、これは lightdm セッションだけでなく、すべてのユーザーに適用されるため、必要に応じてホワイトリストに追加する 2 つ目のルールを追加する必要があります。

このメソッドは、GUI から発行された再起動/etc コマンドのみをブロックすることに注意してください。コマンドラインからのreboot / etcコマンドをブロックするには、molly-guardを使用できます- https://askubuntu.com/questions/17187/disabling-shutdown-command-for-all-users-even-root-consequences/17255で説明#17255

于 2016-04-16T10:58:29.883 に答える