もう出かける時間なのに、Firefox のダウンロードが終わらない。。。。
そんな場合のスクリプトです。
コマンドライン例。
:
: while_exist で「xxx.part」が消えるまで待って、それから warm_halt でシャットダウンします
:
$ while_exist xxx.part ; warm_halt
:
: 上のコマンドは返って来ません。このまま出かけましょう。
:
スクリプト。(パスの通っているディレクトリに置きます)
while_exsit.sh
# !/bin/bash
PATH=/usr/bin:/bin
file=${1:?"usage: $0 file [interval]"}
interval=${2:-60}
while [ -f "$file" ]
do
sleep $interval
done
(※2015/01/09 追記) このスクリプトを使わない代替方法があります。詳しくはコメント欄を参照ください。
warm_halt.sh
# !/bin/bash
PATH=/usr/bin:/bin:/sbin
#
# root 以外で実行する場合、
# `sudo sync` と `sudo shutdown` は NOPASSWD で実行できる必要があります
#
[ "$LOGNAME" = "root" ] && sudo="" || sudo=sudo
$sudo sync # 「sync は 2回」派、「sync は 4回」派の人は要調整
$sudo sync
$sudo sync
$sudo shutdown -h now
スクリプトの名前を変えたい場合は、シンボリックリンクを張るなどで対処してください。
以下は例です。
$ ln -s while_exist.sh while_exist # 拡張子なしの名前でシンボリックリンクを張る
$ ln -s warm_halt.sh warm_halt # 〃
参考。sudo の NOPASSWD の設定。
visudo コマンドで sudo の設定ファイル(/etc/sudoers)を開いて編集します。
/etc/sudoers は root 権限が必要なので sudo をつけます。
$ sudo visudo
: or
$ sudo EDITOR=vim visudo # その場だけ vim を使って編集したい場合
例えば、lnznt アカウントに NOPASSWD で sudo を許可する場合、以下のような行を /etc/sudoers に追加して保存(エディタは終了)します。
lnznt ALL=(ALL:ALL) NOPASSWD: ALL
上の書式の意味は以下ですので、セキュリティポリシなどに合わせて適宜変更してください。
lnznt ALL=(ALL:ALL) NOPASSWD: ALL
# アカウント名 ホスト=(ユーザ名:グループ名) NOPASSWD: コマンド名
# [誰が] [どこで] [誰になって] (パスワードなしで) [何を] する
# ※ホスト、ユーザ名、グループ名、コマンド名には ALL (全てを意味する) が指定可
もっと詳しいことは sudo(1)、sudoers(5) を参照してください。