Macで色々なパッケージのアップデートとかを cronジョブで定期的に行う様にしているのですが、 このジョブが1時間のタイムアウトを出すようになって調べてみた所 Homebrewのupgradeで止まってました。
さらに見てみるとHomebrewでのgccのアップグレードで止まってる様に見えました。
gccのinstall/upgradeにはすごく時間がかかる
手動でbrew upgrade
してみた所、gccの
$ brew upgrade
==> Upgrading 8 outdated packages, with result:
vapoursynth 42.1, xvid 1.3.5, gcc 7.2.0_1, unixodbc 2.3.5_1, htop 2.0.2_1, mercurial 4.4.2_1, youtube-dl 2018.01.14, fftw 3.3.7_1
==> Upgrading fftw
==> Installing dependencies for fftw: gcc
==> Installing fftw dependency: gcc
...
==> ../configure --build=x86_64-apple-darwin17.3.0 --prefix=/usr/local/Cellar/gcc/7.2.0_1 --libdir=/usr/local/Cellar/gcc/7.2.0_1/lib/gcc/7 --enable-languages
==> make
な感じで、gccのmake
の所で止まっているようになってしまいました。
ただ、プロセスとかをチェックして見るとmakeに関するプロセスっぽいのが走っていて 何かやってる感じでした。
とりあえず走らせたままちょっと探してみると同じような話が。
macOS Sierraでbrewを使ってgccをインストールする際makeで止まる…ように見えるという話。 - Qiita
1~2時間かかるということなので、設定してるcronジョブでは1時間でタイムアウトするようになってるので その制限で毎回落ちていた様です。
仕方ないのでこれを走らせたまま待っていると、正確に計ってないですが多分2時間位経ったあとに makeが終了して他のアップグレードも終わりました。
ちなみにHomebrewで入れるgccはデフォルトでは/usr/local/bin/gcc-7
としてインストールされるので、
普通にgcc
と呼ぶとMacデフォルト(Xcode Toolsを入れた時に入るもの)の/usr/bin/gcc
が呼ばれます。
Homebrewでgcc
を直接入れた覚えがなくても上にもあるように他のパッケージから依存されて入ってることが多いと思います。
そんななかでたまにbrew upgrade
した時に異常に時間がかかっておかしいな、と思うこともあるかもしれませんが
(もしくは初めてgccに依存するパッケージを入れるときとか)、
gccのinstall/upgradeは数時間かかる可能性があるので覚えておくと良いかと。
cronジョブは以前スクリプトの途中でスタックした状態が毎回そのまま溜まって行ってしまうような事があったので タイムアウトを入れたのですが、 1hだとこれがひっかかるのでとりあえず5h位にしておきました。