LoginSignup
1
0

More than 5 years have passed since last update.

Suspend on LANのような何か

Posted at

本当はTCP/IPのプログラムを書くべきかもしれないが、とりあえずSystemdを使ってそれっぽいことができたのでまとめておくことにした。

TL;DR

基本方針はSystemdにroot権限でsuspendさせるようにする

  1. Systemdにinotifywaitで特定ファイルの書き込みを監視させるプログラムを置く
  2. SSHで指定されたファイルにコマンドを書き込む
  3. コマンドに応じて指定された処理を実行

SSHで特定ファイルに'suspend'と書けばサスペンドできるようになる目論見

inotifywaitで特定ファイルの書き込みを監視する

cmdwatch
#!/bin/bash

reqfile="てきとうなファイル"

while :
do
    inotifywait -e modify -e close_write $reqfile
    comreq=`cat $reqfile`
    if [ "$comreq" = "suspend" ]; then
        sudo systemctl suspend
    elif [ "$comreq" = "kill" ]; then
        break
    elif [ "$comreq" = "test" ]; then
        echo test
    fi
done

echo finish

コマンドリクエスト用のファイルに書き込みがあったら内容を確認してコマンドに応じた処理が走るようになっている
ファイルは特定ユーザのみが読み書きできるようにしておくとrootまたは特定ユーザのみが書き込みできるようにできるので意図しないユーザがコマンド実行することはない

systemdでデーモン化

/etc/systemd/system/rootcmd.service
#Root commnader

[Unit]
Description=Watch commands, root execution.

[Service]
User=root
Group=root
ExecStart=/usr/local/bin/cmdwatch
Type=simple

[Install]
WantedBy = multi-user.target

ユーザをrootにするとcmdwatchで実行するコマンドがrootで実行されることになる

使いみち

macOSやwinなどでssh環境が整えてあれば以下のコマンドでサスペンドできるようになる

ssh -i 鍵ファイル user@server "echo suspend > 指定したファイル"

これをmacOSならAutomator、winならbatファイルとして保存しておけばダブルクリックでサスペンドできるようになる
べんり。
データ用のサーバPCが8台のHDDを使っていて音がうるさいのと電気がもったいないのでこんなことをすることになった

参考

そのほか

cmdwatchって名前をつけたけど、コマンド監視だけじゃなくて実行もするからネーミングとしてはよくなかったかもしれない

1
0
3

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
1
0