0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Ubuntuで一定時間後にパソコンをシャットダウンまたはサスペンドする方法

Posted at

きっかけ

ASMR動画を流しながら寝たいが、寝てる間ずっとパソコンが動画を再生していると、経済的ではない。そこで、一定時間後にパソコンをシャットダウンまたはスリープ状態にする方法がないか調べた。

使用OS

Ubuntu 22.04 jammy

シャットダウンとスリープ状態の利点と欠点

具体的な方法の前にまずシャットダウンとスリープ状態の利点と欠点を述べると

シャットダウン

  • 利点
    1. エネルギーの節約
      コンピュータを完全にオフにし、長時間の非アクティブ時に電力を節約。
    2. システムのリフレッシュ
      クリーンな状態から起動することで、ソフトウェアに関連する問題を解決することがある。
    3. 摩耗の軽減
      定期的なシャットダウンにより、ハードウェアの寿命を延ばすのに役立つ。
  • 欠点
    1. 起動に時間がかかる
      完全なシャットダウンからの起動には時間がかかる。
    2. 作業の中断
      すべてのアプリケーションを終了することは作業をすぐに再開する必要がある場合に不便。

サスペンド(スリープモードまたはスタンバイ)

  • 利点
    1. 早い再開
      システムがセッションをメモリに保持するため、作業をすばやく再開できる。
    2. アプリケーションの状態保持
      再開時に開いていたアプリケーションとファイルはそのままの状態を保持。
    3. エネルギー効率
      短い非アクティブ期間中、通常の運用に比べて消費電力が少ない。
  • 欠点
    1. 電力の消費
      メモリを維持するために一部の電力を消費する。
    2. バッテリーの消耗(ラップトップ)
      ラップトップが充電されていない場合バッテリーを消耗する。保存されていないファイルがある場合充電がゼロになると、編集内容が消えてしまう。
    3. 安定性の問題
      まれにサスペンドモードからの再開が安定性の問題を引き起こす場合がある。

以上を踏まえて、状況に応じてどちらかを選ぶ。

一定時間後にシャットダウンする方法

例えば60分後にシャットダウンして欲しければ以下をターミナルで実行。

sudo shutdown -h +60

一定時間後にサスペンドする方法

以下の方法がうまく行った。

  1. Bashシェルスクリプトを作成(ファイル名は適当)して開く
    例えばvimで開く場合

    vim suspend.sh
    
  2. 以下をファイル内に記述して保存

    #!/bin/bash
    
    #スクリプト引数の数をチェックし、1つでない場合は使用方法を表示し、スクリプトを終了
    if [ $# -ne 1 ]; then
      echo "Usage: $0 <duration>"
      echo "Example: $0 30m (for 30 minutes)"
      exit 1
    fi
    
    #スクリプトの引数からスリープタイマーの時間を取得
    duration="$1"
    
    #sleep-timer.serviceファイルを生成し、
    #指定された時間後にスリープ(サスペンド)するコマンドを定義
    cat > /etc/systemd/system/sleep-timer.service <<EOF
    [Unit]
    Description=Sleep timer for automatic suspend
    
    [Service]
    Type=oneshot
    ExecStart=/bin/bash -c "sleep $duration && systemctl suspend"
    
    [Install]
    WantedBy=multi-user.target
    EOF
    
    #sleep-timer.timerファイルを生成し、
    #起動後に指定された時間後にsleep-timer.serviceを起動するタイマーを定義
    cat > /etc/systemd/system/sleep-timer.timer <<EOF
    [Unit]
    Description=Sleep timer for automatic suspend
    
    [Timer]
    OnBootSec=$duration
    Unit=sleep-timer.service
    
    [Install]
    WantedBy=timers.target
    EOF
    
    # systemdマネージャーをリロードし、新しい設定を適用
    systemctl daemon-reload
    
    # 新しいタイマー設定を反映させる
    systemctl restart sleep-timer.timer
    
    #スリープタイマーが設定された時間を表示
    echo "Sleep timer set to $duration. The system will suspend after $duration of inactivity."
    
    
  3. コマンドラインでの実行
    これにより、例えば60分後にサスペンドして欲しければ以下を実行。

    sudo ./suspend.sh 60m
    

    10秒後にサスペンドしてほしければ

    sudo ./suspend.sh 10s
    

    2時間後なら

    sudo ./suspend.sh 2h
    
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?