60分間実行した後にLinuxサーバーをシャットダウンする方法は?

60分間実行した後にLinuxサーバーをシャットダウンする方法は?

セキュリティ上の理由から、通常はシャットダウンするサーバーがあります。作業したい場合は、開いて作業を実行してからもう一度閉じます。私の課題は通常15分を超えません。 60分後に自動的に終了するメカニズムを実装したいと思います。

このためにcronを使用する方法を見ましたが、cronはサーバーが最後に開かれた時間を考慮していないので、それは正しい方法ではないと思います。周期的なパターンのみを設定できますが、データは考慮されません。

この実装はどのようにできますか?

答え1

いくつかのオプションがあります。

  • 直接時間提供shutdown -P:

    shutdown -P +60
    

    気づくshutdown マニュアルページまた、次のように指摘しました。

    時間パラメータを使用している場合は、ログインが許可されないように、シャットダウンの5分前に/ run / nologinファイルが生成されます。

  • 使用at注文する。

  • 作るシステム単位ファイルまたは初期化スクリプトshutdown -P 60起動時に実行されます。

  • クローンの使用@reboot起動後にコマンドを実行します。

    (ルート)crontabに追加:

    @reboot shutdown -P +60
    

後者の2つの方法では、sleep 3600 && shutdown -P now時間パラメータを使用してシャットダウンを60分遅らせることもできますshutdown。これにより、閉じるまで最後の瞬間までログインできます。

答え2

これは次のとおりですXYの問題

私の課題は通常15分を超えません。 60分後に自動的に終了するメカニズムを実装したいと思います。

60分後に終了すると、より多くの時間が必要な特に複雑な問題が発生する可能性があります。以前の多くの解決策は、シャットダウンが遅れる傾向がなかった。

ジョブが対話型ジョブではなく他のコンピューターで自動的にトリガーされるスクリプトジョブの場合、@sdkksは次のようになります。良い解決策これを行うには、スクリプトとすべての操作が完了したらすぐにシステムをシャットダウンする必要があります。

ただし、操作が対話型の場合は、代わりにアイドル検出を実行することをお勧めします。

GUI(X11)で操作を実行している場合は、ここで説明されている方法を使用してアイドル状態のGUIセッションを検出できます。システムがアイドル状態で再アクティブ化されたときにコマンドを実行します。

端末を介してこれを行う場合は、このwhoコマンドを使用してログインしているユーザーを検出できます。who空の結果が返されると、マシンを終了するcronjobを設定できます。これはかなり保守的なアプローチです。コンソールを接続してもアイドル状態にしておくと、システムはシャットダウンしません。

より積極的にアイドル端末セッションを切断するには、前の方法を次のように組み合わせることができます。アイドルSSHセッションの自動切断 ClientAliveIntervalそしてClientAliveCountMax。 SSHはありませんが、ローカル端末セッションがある場合は、他の方法は端末を使用することです。怠惰コマンドが返される時間ですw

答え3

毎回同じユーザーでジョブを実行する場合は、構成ファイルにshutdownコマンド(オプションで-Pオプションを使用)を追加するだけです。この数字は、終了コマンドが遅れる時間(分)を示します。ユーザーがパスワードなしでsudoを介して終了コマンドを実行できることを確認してください。

echo "sudo shutdown -P +60" >> ~/.profile

次に追加:

他のほとんどの答えを読んだ後(root)cronに「@reboot / <path to script / command>」を追加するオプションが好きです。セバスが出した答えは4番目の選択でした。シャットダウンコマンドを追加するか、シャットダウンを実行し、cronを介して実行する小さなスクリプトを作成できます。 WoJにはsystemdを使用しても良いソリューションがあります。

答え4

次のコマンドはcommandパラメータで実行され、正常に完了するとすぐにボックスが閉じます(ユーザーが実行できると仮定)poweroff。使用する必要がありますsudo poweroff

command --parameters && poweroff

そして、次のコマンドは、poweroffコマンドが終了するとすぐに実行されます。

command --parameters ; poweroff

コマンドが完了した後に中断が必要だと思われる場合は、次のようにします。

command --parameters ; sleep 3600 ; poweroff

コマンドがタイムアウトする可能性があると思われる場合は、コマンドを1時間に制限できます。

timeout 1h command --parameters ; poweroff

timeoutはパッケージの一部なcoreutilsので、すでに持っているはずです。

関連情報