※こちらは旧サイトです(新サイトはこちら

サーバで時間のかかる処理をする時に便利そうなコマンド(at,screen,script)の自分用メモ

2017-11-22 20:57:19

コマンドぶん投げて定時で帰るためのメモ(※今回はコマンドの概要のみです)

atコマンド

指定した時刻にコマンドを1回だけ実行する

// 18:00に指定コマンドを入力
$ at 18:00
at> echo 定時ですかえりましょう | lolcat
[Ctrl+d] で抜ける

screenコマンド

仮想端末を作成してそっちでコマンド実行出来る。screenで実行したあとはSSH切っても継続実行される

// 仮想端末の一覧を見る(起動してない状態)
$ screen -ls

No Sockets found in /run/screen/S-9zilla.

// 仮想端末を起動
$ screen

// なんか時間かかる処理ぶん投げる
$ watch date

// 現在のセッションからデタッチ
[Ctrl+a] [d]

// 仮想端末の一覧を見る(さっきデタッチしたやつが一覧に出る)
$ screen -ls
There is a screen on:
    16929.pts-3.9zilla  (2017年11月15日 18時10分49秒) (Detached)
1 Socket in /run/screen/S-9zilla.

// デタッチした端末にアタッチする(一覧に出てるpidを指定)
$ screen -r 16929

// その後終了
$ exit
[screen is terminating]

例えば同じサーバ上で、だれかほかの人が起動してる仮想端末に参加して共同作業、みたいな事も出来る

// -x 16929 で乱入して操作を共有出来る
$ screen -x 16929

誰かがアタッチ中だったり、回線切れでアタッチしたままになったスクリーンを横取りするには-dをつける

$ screen -ls
There are screens on:
        19217.pts-0.9zilla     (Attached) // ← アタッチされてる端末

// -d で横取り
$ screen -d -r 19217

仮想端末上でスクリプト暴走しちゃってCtrl+Cとかも受け付けなくなってしまった場合

[Ctrl+a] [k]

// その後、終了するかどうか(y/n)が出るので、y

scriptコマンド

実行内容のログをとる。bashrcとかに仕込んでおくと、SSHで入ってきた人の行動ログを残したりもできる

// 「hoge.log」というファイルにログを記録開始
$ script hoge.log
Script started, file is hoge.log

$ source ~/.bash_profile
.bash_profile loaded.

$ toilet ズ

  m   mm# #
   """  #
       #
     m" "m
 mm""     #


$ toilet ン

  mm
    "    #
        #
      m"
 "mm""


$ toilet ド
  m
   #   # #
   #mm
   #  ""m
   #
   #


$ toilet コ

 m   mmmmm
  """    #
        m"
     mmm#
  """   "


$ toilet キヨシ
    m
    # mmm          mmmmm       ""m
 """"#         """"    #      mm
mmmm"#""""       mmm""#         "    m"
     "m               #            m"
      #         mmm""""m      "mm""


$ exit
exit
Script done, file is hoge.log


// さっき実行したコマンドの履歴が、「hoge.log」にそのまま記録されてる
$ cat hoge.log
Script started on 2017年11月15日 18時19分18秒
$ source ~/.bash_profile
.bash_profile loaded.
$ toilet ズ

  m   mm# #
   """  #
       #
     m" "m
 mm""     #


$ toilet ン

  mm
    "    #
        #
      m"
 "mm""


$ toilet ド
  m
   #   # #
   #mm
   #  ""m
   #
   #


$ toilet コ

 m   mmmmm
  """    #
        m"
     mmm#
  """   "


$ toilet キヨシ
    m
    # mmm          mmmmm       ""m
 """"#         """"    #      mm
mmmm"#""""       mmm""#         "    m"
     "m               #            m"
      #         mmm""""m      "mm""


$ exit
exit

Script done on 2017年11月15日 18時20分16秒

シェルスクリプトなどのスクリプトの結果をまるっと記録したい場合は以下のようにする

// 実行するシェルスクリプト
$ cat zundoko.sh
toilet ズン
toilet ドコ

// -a [ログファイル] -c [スクリプト]
$ script -a zundoko.log -c ./zundoko.sh
Script started, file is zundoko.log

  m   mm# #     mm
   """  #         "    #
       #              #
     m" "m          m"
 mm""     #    "mm""


  m
   #   # #     m   mmmmm
   #mm          """    #
   #  ""m             m"
   #               mmm#
   #            """   "


Script done, file is zundoko.log

// スクリプトの結果が出力されてる
$ cat zundoko.log
Script started on 2017年11月28日 11時03分39秒

  m   mm# #     mm
   """  #         "    #
       #              #
     m" "m          m"
 mm""     #    "mm""


  m
   #   # #     m   mmmmm
   #mm          """    #
   #  ""m             m"
   #               mmm#
   #            """   "



Script done on 2017年11月28日 11時03分40秒