[Python3]タスクスケジューラー経由で動作させると、コンソールが消えない問題をどうにかしたい。

最近、ふと思い立ってPythonを始めました。

といっても近頃流行りの機械学習的なものではなく、Seleniumを使ったブラウザの自動操作をやりたくて覚えたんですけどね(´・ω・`)

さてタイトルの話題。
(自分の環境はWindows10上でAnaconda5.2.0を使って開発しております。その前提でお聞きください。)

作ったコードをタスクスケジューラーを使って動作させると、なぜかコンソールが動作終了後も出っぱなしになってしまいます。
1日になんども動かすので、あまり出っぱなしにはなってほしくない!何とかしたい!……と思って調べていたら、2つほど手段が出てきました。

①pythonw.exeを使う。

pythonにはランタイムが2つあるらしくて、コンソールを出す「python」の他に、コンソールを表示しない「pythonw」なるものがあるみたいですね……
これならはじめからコンソールが出ないので、問題にならないです。
python使いの方なら「何アタリマエのこと言うてんねん!」て感じでしょうが、まじなんも知らんところからのスタートなんでゆるして(´;ω;`)

②システムコールを叩いてコンソールそのものを消す。

言われてみれば「なるほど」なんですけどね。

でもこれだと、同時に起動している他のタスクも消えてしまうかもしれないので、確実に1つしか消えない、というとき以外は微妙です。

 

まーおとなしくpythonwで動かすことにします。

参考サイト

windows – Python Scheduled Task Close taskeng.exe – Stack Overflow
https://stackoverflow.com/questions/28302795/python-scheduled-task-close-taskeng-exe

複数のfilebeatからlogstashへデータを流し込もうとしたらlogstashが死んだ

俺も死んだ(チーン

今頃なのか今更なのか知りませんが、Elasticstackに手を出し始めました。
柔軟性が高いのはいいけど、その柔らかさに殺されそうでまぢつらたんです(´;ω;`)

ちなみに構成は、
CentOS6
elastic 6.x
です。

さて、今回問題のケースでは、ログをfilebeatで取得して、logstashに流し込み、elasticsearchに書き込む構成を取りました。
そして、複数サーバーのログを集約させたいので、各サーバーにfilebeatを設置する、という形にしました。
図(?)にするとこんな感じ?ずれてたらごめんなさい
[FB]―[LS]―[ES]
[FB]/

これで動かしたけれども、elasticsearchのほうにIndexがさっぱり作られません。おかしいと思って/var/log/logstash/logstash-plain.logを見ると、以下のエラーがいっぱい書かれてました。

長すぎ!
まぁ要点は「Error: Cannot assign requested address」だと思います。

この時、2つのfilebeatが設定していたlogstashの宛先ポートはどちらも5044でした。
冷静になって考えたら、1つのポートを奪い合う状態はまずいので、片方のfilebeatのポートを5055に変更してやり直してみたら、普通に動きました!(∩´∀`)∩ワーイ

単純にポートの競合はやめましょうって話でした。よくよく考えると恥ずかしいw

引っ越しするので万年筆で恵方巻きを作る

このたび、9年ほど過ごしていた部屋を引き払い、東大和市の方に引っ越しすることになりました。

今まで、1Kで洗濯機なしのクソセマ物件で過ごしていましたが、これからはドラム式洗濯機で悠々洗い物ができるようになります。すごい!(^o^)

 

そんな引っ越しですが、大変気がかりなことが有ります。そう、万年筆の運搬問題です。

別に1本2本なら、ちょっと胸に挿して持ってけばいいんですけど、そんなもんじゃない量があるので、それなりに困ってます。
今まで散財してきた金の量を数えるみたいで嫌なので、持ってる本数はあまり数えないようにしてきたのですが、ざっと見ただけでも50本オーバーはあります。おぉ・・・かみよ!!
それでも、ガチで溜め込んでいるお歴々に比べたら、まだ全然ひよっこなんですから、ほんと万年筆の世界はおそろしいもんですね。

……こまけえこたあいいのです。とにかく運搬です。

本数やら金の話はともかく、その目の前にある問題の解決が先なのです。

竜の卵を優しく迅速に運ぶがごとく、しっかりした装備(?)が必要なのです!

しかし、うちには専門的な緩衝材なんてものはありません。使えそうなのはタオルぐらい。
仕方ないのでタオルでまきまきしてみました。

万年筆恵方巻き1

上の写真にように、タオルで万年筆を巻いて、少々間隔をおいてまたさらに万年筆を巻く。ということを繰り返します。
そして何本か巻き込んだものがこちら。

万年筆恵方巻き2

このままだと、ダンボールに入れたらたちどころにバラけますので、どうにかしてこの状態を固定します。ゴムとかテープとかを使えばいいと思いますが、自分の場合はラップで巻き巻きしてみました。

万年筆恵方巻き3

なんかラップで巻くと、恵方巻き感が微妙にアップしてる感じがしていいですね!!なんてったって食品用ですからね!
そして大体の万年筆を巻き巻きし終わった結果がこちら。

万年筆恵方巻き4

1ロールにだいたい5~7本ぐらいを詰めました。これで適当に運んでも安心ですわね!

ちなみに、ロールのサイド部分は全く保護されていないので、抜け落ちるのかもしれないと不安でしたが、思いっきり振っても抜けませんでした。多分、ラップできつめに巻いてるから問題にならないのかもしれません。
ですので、万年筆を大事にするあまり、ふんわり巻いたりするとやばいかもしれません。

さて、気がかりな万年筆問題も解決したので、ほかのてきとーな品物の処理でもしてきますかね……。

[PHP] WindowsでCodeceptionを使うと、ChromeDriverが動かない!?

なんとか動くようになったけど、久々にめっちゃハマった(´;ω;`)

 

最近のChromeって、コード経由でコントロールするときにSeleniumを挟まずにChromeDriver単体で触ることができるんですね。知らずに生きてましたわ;;

というわけで、CodeceptionでChromeDriver経由でChromeを触ってみました。

(ちなみに、使用しているOSはWindow 10 Home 64bitで、Git Bash(64bit)をインストールして、これをシェルとして使っています。)

この辺のChromeDriverを使うまでの手順は公式ページのWebDriverのページに書いてあるものをそのまま実行しています。

To run tests in Chrome browser you may connect to ChromeDriver directly, without using Selenium Server.

1. Install ChromeDriver.
2. Launch ChromeDriver: chromedriver --url-base=/wd/hub
3. Configure this module to use ChromeDriver port:

引用元: WebDriver – Codeception – Documentation (http://codeception.com/docs/modules/WebDriver#ChromeDriver)

 

この通りにやってみて、シェルで「./vendor/bin/codecept run」と走らせてみたのですが、エラーが発生します。

「レスポンスがJSONデコードできないよ!」って言うエラーですけど、問題はそこではなくて、ChromeDriverからのレスポンスが「unhandled request」ってなってるところ。
一応Chromedriverをブラウザ経由で(http://localhost:9515)見てみましたが、同じレスポンスが帰ってきます。これじゃあさっぱり前に進みませんねぇ。

なぜなのかわからず、ChromeDriver周りのエラーをググっていったら、こんな記事を発見。

Issue with using selenium and webdriver doc · Issue #2968 · electron/electron · GitHub
https://github.com/electron/electron/issues/2968

Windowsでは動かないと、似たような問題を訴えてらっしゃいます。
そしてこの人がやってみたことは、–url-baseのパスを「wd/hub」にすること。

改めてコマンドを叩いたら、バッチリ動きました。

おうふ、マジかよ……(‘A`)

多分Linuxでは問題なく動くんだろうなぁ。
Windowsなんぞで動かすやつなんぞしらん!ってことなのでしょか?つらみ(´;ω;`)

vagrant up したら、synced_folder周りでエラーを吐かれてハマった話

仮想環境むずかしい(´;ω;`)

 

Virtualbox+VagrantをWindows10 Homeにインストールして、シェルはGit Bash(中で動いているコマンド群はMINGW64)を使って「vagrant up」を叩いたら、以下のようなエラーが出ました。

なるほどよくわからん!

実は、その前にrsyncがないよ~みたいなエラーを出されたので、以下の記事を参考にしてGitにrsyncコマンドを入れてから上記のエラーが出てきました。
rsyncをGit for Windowsに混ぜる
https://hail2u.net/blog/software/install-rsync-to-git-for-windows.html

「dup() in/out/err failed vagrant」あたりでググると、色々質問スレッドが出てくるのですが、有効な対応策はあまり出て来ず終い……

仕方ないので一つ一つ振り返ってみたら、先ほど読んだrsyncの導入記事、よーく見てみると32bit版のrsyncの話だったんですね。

対して、今回問題になっているGit Bashは64bit版……あれ?

Git for Windowsを64bit版にしたらrsyncが使えなくなったのをどうにかしたメモ
http://qiita.com/hadakadenkyu/items/e5b4a9fbd510e12ab1ac

以下、上記記事から引用。

1. MSYS2 installerをインストール
2. 案内に従ってセットアップを終わらせる
3. pacmanでrsyncを導入 pacman -S rsync
4. MSYS2のインストールフォルダ内からrsync.exeを探し、Git for Windowsのuser/bin/内にコピー
5. Git Bashからrsyncが使える!

MSYS2 installer
http://www.msys2.org/

 

この手順で64bit版のrsyncをインストールしてから改めて「vagrant up」したら、すんなり解決しました。