タグ

LINUXとshに関するdai_yamashitaのブックマーク (7)

  • ログアウトしてもバックグラウンド ジョブを継続する方法

    はじめに SSH 接続で時間の掛かるシェルスクリプトをバックグラウンドで走らせて帰りたいのに、SSH 接続を切るとジョブが死んでしまいます。SSH 接続に限らず目の前の OS からログアウトしたりターミナル エミュレータを終了しても同じ現象が起こります。 この症状は正常です。なぜなら、バックグラウンド ジョブを起動したプロセス(ログイン シェル)が子プロセスである該当のバックグラウンドジョブをハングアップ シグナル( HUP )によって終了させるからです。 シェルスクリプトを起動した親プロセスは子プロセスの終了状態を監視しています。ですからログアウトして親プロセスであるシェルが終了すると子プロセスはゾンビ プロセスとなってしまうので親プロセスとなるシェル(ログインシェル)は子プロセスであるバックグラウンド ジョブを kill ( kill -HUP ) するのです。 nohup コマンド

    ログアウトしてもバックグラウンド ジョブを継続する方法
  • コンソールから切れたプロセスを標準出力につなげなおす - 絶品ゆどうふのタレ

    不慣れな環境を不意にいじった時にあるあるネタ。 とりあえずー とか言って勢いで書いたsetupスクリプトを実行してみたら意外と時間かかって、 ちょっと目を離した隙にsshの接続が切れちゃいました! 。。。ありますよね。ほんとよくありますよね。 そうなる予感はあったんだ なんて後の祭りです。ふとした油断から、screenもnohupすらも使わずにやってしまって、こんなことに。 shellがHUPしなかったからプロセスは生きてるものの、ログが見れないから進行状況がわからない。 うまく行ってるのかどうかモヤモヤした気持ちのまま、プロセスが終わるのをじっと待つ。。。 まぁ実に切ないです。 こんな時、いつも思うこと。 このプロセスの出力、もっかいstdoutに繋げられたらいいのに。。。 はい。というわけでつなげましょう。 長い前座ですみません。 切り離したプロセスを用意 #!/bin/bash wh

    コンソールから切れたプロセスを標準出力につなげなおす - 絶品ゆどうふのタレ
  • jq コマンドが強力すぎてヤバい件

    JSON の内容を sed や awk のようにフィルタ・加工するためのプログラムに jq がある。 JSON 形式で提供されている WebAPI の出力や、ログの内容を扱うのにとても便利。 その強力さの一端を紹介したい。 インストールは Mac OS X であれば Homebrew から。公式サイトからバイナリをダウンロードすることもできる。 $ brew install jq サンプル用の JSON を用意しておく。 $ cat << EOS > jsonfile {"name": "Foo", "sex": "Male", "age": 15, "emails": []} {"name": "Bar", "sex": "Male", "age": 20, "emails": ["hoge@example.jp"]} {"name": "Baz", "sex": "Female", "

    jq コマンドが強力すぎてヤバい件
  • シェルスクリプトで「ビルドスクリプト」を作る時に便利なテクニック - ククログ(2012-10-11)

    プログラムの種類によっては、そのまま実行できるものと、実行できるようにするために「ビルド」が必要なものとがあります。Cなどのコンパイルが必要な言語で書かれたプログラムは当然ビルドが必要ですし、コンパイルが不要な言語であっても、インストーラパッケージを作るというビルド作業が必要な場合はあります。 ビルド作業の自動化のためのツールとしてmakeなどがありますが、そこまで格的な事をやる必要がない場合は、シェルスクリプトで「ビルドスクリプト」を作るのが手軽でおすすめです。この記事では、そのような場合に役立つシェルスクリプトのテクニックを4つご紹介します。 エラーの気付きやすさとデバッグのしやすさを高める メッセージに色を付ける シェル関数をライブラリにする 一時的に作業ディレクトリの中に入る エラーの気付きやすさとデバッグのしやすさを高める はじめに紹介するテクニックは問題が発生した時に気づきや

    シェルスクリプトで「ビルドスクリプト」を作る時に便利なテクニック - ククログ(2012-10-11)
  • 複数ホストに ssh しながら tail -F するときにはこうしたらどう? - tokuhirom's blog

    いろいろ方法があるとおもうのですが、以下のようなシェルスクリプトですませるのはどうでしょうか? #!/bin/bash function kill_children { # jobs -l | perl -ne 'print "kill $1\n" if /^\S+?\s+(\d+)/' | sh; pkill -P $$; wait; } trap "kill_children" EXIT HOSTS="192.168.1.1 192.168.1.2" for host in $HOSTS do ssh $host tail -F /service/foo/log/main/current & done wait ちょっと箇条書きで解説すると以下のようなことをおこなっています。 & でバックグラウンドジョブをはしらせるwait でそれらの終了を待つtrap 〜 EXIT は atexit

  • シェル操作課題 (cut, sort, uniq などで集計を行う) 解答編 - Yamashiro0217の日記

    さて先日の設問編 http://d.hatena.ne.jp/Yamashiro0217/20120727/1343371036 の解答例です。 はてブとかトラックバックで解答例もらってて、あきらかに俺の解答よりよかったり面白かったりするので、 最後にまとめたので見てみると面白いと思う。 他の人の解答見てたらsortコマンドがファイルを受け取れるということに気づいた2012年夏。 uniq -c 使ってる人あんまりいない印象。 問1 >cat hoge.log 問2 >cat hoge.log | cut -d, -k1,4 問3 >grep server4 hoge.log 問4 >cat hoge.log | wc -l 問5 >cat hoge.log | sort -k1,1 -k3,3n -t, | head -5 問6 >cat hoge.log | sort -u | wc

    シェル操作課題 (cut, sort, uniq などで集計を行う) 解答編 - Yamashiro0217の日記
  • シェル操作課題 (cut, sort, uniq などで集計を行う) 設問編 - Yamashiro0217の日記

    この記事は弊チームの新人の方にシェル操作に慣れてもらうために作った課題である。 皆様のチームの新人にやってもらってもいいですね。 あとで解答編を書く。 もちろん他の方も解いてもらって構わない。 というか僕の解答以上の解答がきっとあるはずなので、それを教えて欲しい。 はてブで解答でも面白解答お待ちしてます。 さて題。 Webアプリケーションを作っていると偉いさんとか、いわゆる企画の人とかから 「ちょっと○○がどうなってるかログから数字だせない?」 とさらっとお願いされたりする。 そこで「いや、ちょっと手が空いてなくて(こっちは忙しいんだよ糞がっ)」と答えたくなるかもしれないが、 そこは「じゃあさくっとやっておきますよ!僕にかかればちょろいっすよ!」と答えらればかっこいい。 (あまりさくっとやりすぎるとそういう細々依頼がたくさんくる諸刃の剣) 例えば以下のようなログファイルがあったとする。

    シェル操作課題 (cut, sort, uniq などで集計を行う) 設問編 - Yamashiro0217の日記
  • 1