法定点検。

そんな時しかatコマンドを使わない 1 ので、毎年この時期になるとmanマニュアル見ながら確認している。なので、メモ。

物理マシン

停電前にshutdownすれば良いだけなので、こんな感じ。

$ sudo at 19:40 Nov 14
warning: commands will be executed using /bin/sh
at> shutdown -h now
at> <EOT>
job 2 at Sat Nov 14 19:40:00 2009

ちなみに、atコマンドで実行されるジョブの実体はこうなってる。

$ sudo atq
2       Sat Nov 14 19:40:00 2009 a root
$ sudo at -c 2
#!/bin/sh
# atrun uid=0 gid=0
# mail hoge 0
umask 22
LS_COLORS=no=00:fi=00:di=01\;34:ln=01\;36:pi=40\;33:so=01\;35:do=01\;35:bd=40\;33\;01:cd=40\;33\;01:or=40\;31\;01:su=37\;41:sg=30\;43:tw=30\;42:ow=34\;42:st=37\;44:ex=01\;32:\*.tar=01\;31:\*.tgz=01\;31:\*.svgz=01\;31:\*.arj=01\;31:\*.taz=01\;31:\*.lzh=01\;31:\*.lzma=01\;31:\*.zip=01\;31:\*.z=01\;31:\*.Z=01\;31:\*.dz=01\;31:\*.gz=01\;31:\*.bz2=01\;31:\*.bz=01\;31:\*.tbz2=01\;31:\*.tz=01\;31:\*.deb=01\;31:\*.rpm=01\;31:\*.jar=01\;31:\*.rar=01\;31:\*.ace=01\;31:\*.zoo=01\;31:\*.cpio=01\;31:\*.7z=01\;31:\*.rz=01\;31:\*.jpg=01\;35:\*.jpeg=01\;35:\*.gif=01\;35:\*.bmp=01\;35:\*.pbm=01\;35:\*.pgm=01\;35:\*.ppm=01\;35:\*.tga=01\;35:\*.xbm=01\;35:\*.xpm=01\;35:\*.tif=01\;35:\*.tiff=01\;35:\*.png=01\;35:\*.svg=01\;35:\*.mng=01\;35:\*.pcx=01\;35:\*.mov=01\;35:\*.mpg=01\;35:\*.mpeg=01\;35:\*.m2v=01\;35:\*.mkv=01\;35:\*.ogm=01\;35:\*.mp4=01\;35:\*.m4v=01\;35:\*.mp4v=01\;35:\*.vob=01\;35:\*.qt=01\;35:\*.nuv=01\;35:\*.wmv=01\;35:\*.asf=01\;35:\*.rm=01\;35:\*.rmvb=01\;35:\*.flc=01\;35:\*.avi=01\;35:\*.fli=01\;35:\*.gl=01\;35:\*.dl=01\;35:\*.xcf=01\;35:\*.xwd=01\;35:\*.yuv=01\;35:\*.aac=00\;36:\*.au=00\;36:\*.flac=00\;36:\*.mid=00\;36:\*.midi=00\;36:\*.mka=00\;36:\*.mp3=00\;36:\*.mpc=00\;36:\*.ogg=00\;36:\*.ra=00\;36:\*.wav=00\;36:; export LS_COLORS
MAIL=/var/mail/hoge; export MAIL
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin; export PATH
LANG=ja_JP.UTF-8; export LANG
HOME=/home/hoge; export HOME
LANGUAGE=ja_JP:ja:en_GB:en; export LANGUAGE
LOGNAME=root; export LOGNAME
USER=root; export USER
USERNAME=root; export USERNAME
SUDO_COMMAND=/usr/bin/at\ 19:40\ Nov\ 14; export SUDO_COMMAND
SUDO_USER=hoge; export SUDO_USER
SUDO_UID=1111; export SUDO_UID
SUDO_GID=11111; export SUDO_GID
cd /home/hoge || {
         echo 'Execution directory inaccessible' >&2
         exit 1
}
shutdown -h now

Linuxコンテナ用。

コンテナが動いているマシンはいきなりshutdownするわけにはいかんので、lxc-stopで停止してやる必要がある。なので、次のようなスクリプトを用意した。

(legal-inspection.sh)
#!/bin/sh

for i in `lxc-ls`
do
if (lxc-info -n $i | grep -q "RUNNING") then
   echo -en $i"\t:"
   lxc-stop -n $i
   test $? -eq 0 && echo stopping ok.
   sleep 3
fi
done

shutdown -h now

exit 0

ジョブの登録は以下の通り。

$ sudo at -m 19:45 Dec 5
warning: commands will be executed using /bin/sh
at> bash ~/legal-inspection.sh
at> <EOT>
job 3 at Sat Dec  5 19:45:00 2009

これで来年からmanマニュアルをいちいち見ないで済むだろう。

1

cronで事足りる、という話もあるけれど、ちゃんと運用している場合はそれでもよい。でも、一人で運用している場合は、後でcronのエントリ消し忘れとかありうるので、1回きりのatが結構便利だったりする。