disownしたプロセスの標準出力や標準エラーを後から保存する

前の記事で、disownの素晴らしさを紹介したが、基本的に標準出力・標準エラーを諦めることになる。

調子の悪いHDDの丸ごとコピーとかだと、標準エラーを後で見たいので、なんとかならないかネット検索したところ、

gdbで接続して、dup2で標準出力・標準エラーをファイルに繋ぐなんて荒業を紹介している人がいた。

dup2なんてCプログラマじゃなきゃ使おうとも思わんな。

流れとしては、

 

  • 特定のコマンドをdisownする。前の記事参照。
  • プロセスIDを調べる
  • 標準出力、標準エラーのファイルを用意する
  • gdb -p で接続する
  • dup2でファイルに接続する。
  • デタッチ
  • gdbを抜ける

 

うーん。絶対忘れる。

 

以下、サンプル。実際はcpとかでやると思うが今回は、標準出力と標準エラーが分かりやすいようにしている。

標準出力にはdateの結果、標準エラーにはerrorを5秒間隔で。

うーん。非常にメンドイ。なるべくnohupを使いましょう。それか日常的にscreenを使いましょうってことですね。

ただ、考え方は非常に面白いので、覚えておくのはいいと思う。

実行中のコマンドをバックグラウンドにしてログアウトしても消えないように(disown)

軽い気持ちで実行したコマンドが、なかなか終わらなくて、あー。もー。帰りたいのに終わるまで帰れない。

なんて経験があったりする。ただこの disown ってコマンドを覚えておけば、そんなことを気にしないで実行したまま家に帰ることが出来る。

たぶんbash限定かもしれないけど、自分bashしか使わないので。。。

具体的には、

Ctrl-z でプロセスを一旦止めて、

bg でバックグラウンドプロセスにして。

って感じ。

ただこのままログアウトしても大丈夫なプロセスもあったりするのだが、止まるやつは止まる。

そこで、 disown %1 を実行してあげる。(%1はjob id jobsコマンドで確認出来る)

これでログアウトしても止まらないはずなので、安心して帰れる。

 

以下サンプル(cpの大量コピーとかがよくあるかと)

こんな感じ。標準出力するプログラムだと、入力が大変だが、めげずに実行する。

ログアウトすると、標準出力、標準エラーは保存できないので、そこは諦めるか別の方法

最初から、時間がかかるのがわかっているなら、 nohup を使ったほうが良い。標準出力もファイルに保存されるので。

nohupの記事も過去にちょろっと書いた。

 

標準入力からdiff

diffでファイルの比較とかやってると、実行するコマンドの結果(標準出力)を元に比較出来ないのかなと悩むことがある。

一度ファイルに落としてからdiffすればいいので、特に調べてなかったが、ちょいと調べたらあっさり見つかった。

コマンドの標準出力を比較する場合。

 

 

うわ。めっちゃ簡単。bashだけらしいけど、bash以外使った事ないから充分。

<(の間にはスペースは入れてはだめ。

 

コマンドの標準出力とファイルを比較する場合。

diffに限らず

こいつは、いろんなところで使えそう。

無知は罪ですな。

 

 

vimでクォートで囲まれた文字列の置換

あー。どうしても忘れてしまう。

今日ちょうど、「今こそ使う時だ!」って時にすっかり忘れていた。

変数なんかで、シングルクォート(‘)で囲まれている文字列を丸ごと置換したい時がままある。

囲まれてるのが、単語だったら cw で一発なんだが、pathが含まれてたりすると、一文字ずつちまちま消したりと面倒。

そんな悩みを解決してくれるのが以下(シングルクォート版)

 

ci’

 

ダブルクォート版

ci”

 

「ci」 と「囲んでるやつ」で結構出来る。

 

カッコ系でも出来る。まー便利。

 

さー。これで忘れないだろう。

縦書文字作成ツールを作った

その名も、

縦書文字メーカー

前に、AA文字メーカーを作ったので、その姉妹版って感じ。

昔メール書く時に、おふざけで縦書したなーと思い出して、そんなもん今ならちょろっと作ればいいんじゃねと思って作ってみた。

入力した文字を、縦書にしてくれます。LINEとか、携帯メールとかで使えると思います。

  • 文字を入力すると縦書にします
  • 複数行にも対応してます
  • LINEとか、携帯メールでたぶん使えます
  • 等幅フォント(pの付かないフォント)で使えます

こんな感じ。

AA文字メーカーよりは使い勝手がいいかも。あいつはちょっとデカ過ぎた。どうにもならんけど。

ただ、機能優先なんでもうちょっとデザインを何とかしたい。AA文字メーカーもそうだけど。。。

2014/10
androidアプリをリリース

2020/08
放置してたらストアから消えました

routeコマンドかipコマンドで経路ごとのMTUとかMSSとか

極極々まれに、特定のホストと通信できなくて、MTUを調整すると通信できたりすることがある。

MTUは通常回線終端のルーターで設定しておけば、特に問題になることはないのだが、たまーーーーに変なホストがいる。

そのたまーーーーーにいる変なホストのためだけにルーターをイジるのは、馬鹿げているし、Linuxマシンもサーバだったりすると

全体に影響するような設定は嫌なので特定のルーティングに対してだけ設定を行う。

んでこんな設定

route コマンドだとMTUじゃなくMSSの設定になる。

って、route はもはや古いコマンドだと書いたので、

 

 

iproute2では

iproute2 だとMTUの設定になる。

なんでこんなことが必要か?とか、MTUとMSSの違いって何?とか思ったら、MTU, MSS, Path MTU Discoveryとかでgoogle先生に聞けば教えてくれると思う。

これ系のトラブルは、ハマると泣きそうになる。

portフォワードというかTCPリレーというか(socat)

sshのポート転送をこよなく愛しているのだが、ログインするまでもなくポート転送したい時がある。

単純に、Aサーバのこのポートを、Bサーバのあのポートに接続するって場合。

socatってコマンドがあれば、なんとか出来る。

自分の:8443ポートを、foo.example.com:443に繋ぐ。

forkを付けないと、1回の接続でコマンドが終了してしまう。

これで、自分の8443に接続が来ると、foo.example.com:443に接続されるっていうすぐれもの。

ただ、このsocatって一番困るのが、たぶん大体の環境で入ってない。

netcatのncコマンドなら、たぶん何処の環境でも入ってるので、力技でやると、

以下のような感じ。ただ、fifoを事前に作って上げる必要があります。

標準入出力をfifoで繋いであげる感じ。

この考えはとても素晴らしいのだが、仕様なのかなんなのか、そこそこの頻度でコマンドが終了する。

もー。ようわからんので、whileで回してやる。

かなり強引。動作テスト程度には使えるが、本気運用は無理ですね。

ubuntuでUSB HDDケース(CSDRU3B6G)

別にubuntuに限った話では無いのだが、USB HDDケースを買った。

最近のLinuxなら、USB-HDDは特に意識することなく認識するので、

そんな悩む必要も無いのだが、無駄に悩みまくって、最終的にこいつを買った。

同じセンチュリーの裸族のお立ち台シリーズにしようかと思ったのだが、

スライドして差し込めるタイプのこいつの方が、使い勝手がよさそうなのでこいつにした。

以下、良い点。

  • 安い。多分お立ち台より安いし、他のUSB3.0対応でもここまで安いのなかなか無いのでは。
  • USB 3.0対応(当面自分の環境では使わないが)
  • ちゃんと本体に電源スイッチがある(普通のことかもしれないが)
  • スライドして取り外すのが簡単
  • 3TBytes超えのディスクも認識
  • 同じやつを買えば、重ね置きも可能

金額的にも、機能的にも大満足。別に不満では無いが気になるところを強いて言うと

  • 安っぽい(ホント安いプラスチック)
  • アクセスLEDが青い(部屋が真っ暗だと気になるかも。まー隠せばいいだけ)

ちなみに一緒に買ったHDD。

なんか最近Western Digitalばっかりだな。もちろん簡単に認識した。

ただ、今回3TのHDDを初めて買ったのだが、昔から持っていた、SATA-USB変換ケーブルだと、認識してくれない。

今回買ったHDDケースもう一個買ってもいいかな。

pythonで標準出力のバッファを制御する

logresolveコマンドのpython版を作った時に知ったので、メモを残す。

 

内容は表題のとおり。

 

以下2パターンがある模様。

 

  1. 起動時のオプション(-u, unbuffered)を指定する。

  2. sysモジュールからハンドラにアクセスし、都度flushする。

すぐ忘れそう。。。

apacheのログを後からホスト名変換(python編)

前に、同じ記事を書いたが、なんかubuntuをアップグレードした影響なのか、ちょっと挙動が変わった。

前は、標準入力に渡してあげると、順次変換が実行されていたのだが、今は、まとめて結果が表示される。

多少遅くても、実行時眺めていたかったので、それならpythonで作ればいいやんと思ってとてつもなくと汚く書いた。汚い!!!

ファイル名を渡すか、標準入力で渡すかのみです。

オリジナルも同じだが、逆引き出来ない時の、タイムアウト時間がちょっと長くて
こっちでは短くしたかったのだが、結局面倒で(実力が無くて)やめた。