たまに使うnohupを間違えた話

2023年12月26日

テクノロジー 日記

eyecatch nohup使ってますか? nohup便利ですよね? nohupってなんぞ?って思った人、サーバーコマンドを使っていませんね? 今回はサーバーコマンドのnohupを久しぶりに使ったらアホな間違いをしていたというお話です。 ついでに簡単にnohupの説明もしたいと思います。

nohupの書き間違え

久しぶりにnohupコマンドを使おうとしたら、nowupと打ち込んでいました。 ナウアップと読んでいたのが原因で、ノーハップなんですよね。 英語が弱いとこういうミスもしがちなのです。 でも、nohupって一体どういう単語なんだろう?こんな英単語無いだろうなと思って調べてみたら、次の内容が分かりました。
「nohup」は「no hang-up(ノー ハングアップ)」の略。 「hang-up」という英単語は「電話を切る」「ハングアップ(機器やコンピューター・プログラムの動作がピタッと止まってしまうこと)」という意味を持ちます。 参考 : https://chico-shikaku.com/2023/09/nohup-pronunciation-abbreviation/
no-hang-upの略だったのか!!! 知らんかった!!!

nohupってどんなコマンド

そもそも、サーバーコマンドをよく使う人でもこのコマンドを知らない人もいるかもしれないので、簡単に説明すると、 このコマンドは、バックグラウンドでコマンドを実行させるシステムコマンドです。 nohup コマンド & こんな漢字でコマンドを実行すると、ターミナルには、コマンドの実行の経過や結果は表示されずに、nohup.outというファイルが作られてバックグラウンドで進行している結果が記録されます。(コマンドの実行結果がターミナル表示される仕様になっている必要があります) ちなみに、別のファイルに出力したい場合は、次のようにするだけでできます。 nohup コマンド > 出力したいファイル名 & ファイル出力が不要な場合は、少し長くなりますが次のとおりです。 nohup コマンド >/dev/null 2>&1 & 最後の&の付け忘れに注意してくださいね。

nohupを使ってPHPの非同期処理

PHP言語はJavascriptと違って手軽に非同期処理ができません。 裏技として、nohupをexec実行して、非同期をするという方法があり、これを利用すると処理時間が掛かってtimeoutしてしまうような重い処理を、確実に処理完了させることができるようになります。 Javasscriptなどからの連携で、処理時間などを随時計測できたりするので、「あと何分」みたいな表示を正確に出すことも可能になります。(計算は個別にしなければけませんが・・・) でも、この方法も手軽にできるわけではないので、こんどまとめてブログにやり方を書こうと思います。(気になる方はしばしお待ち下さい)

あとがき

クソほど便利な、nohupコマンド、実際に使ってみると、jobs , bg , fwなどのコマンドも知っておくことでより便利に使うことができます。(バックグラウンド処理をフォアグラウンド処理に切り替えたりできます。) サーバーコマンドって、使っている人しか知らないし、全てのコマンドを知っているエンジニアというのもなかなか出会うことが少ないので、コマンドって結構浅い知識の人が多いのではないかと思っています。 実はサーバーコマンドだけでプログラミングよりもすごいことができるっていうケースもたくさんあるので、今回紹介したような裏技なんかは、個人的に非常に楽しんで調査した過去を思い出しました。 これからも、nohup使い続けていくと思うので、末永くよろしくと言いたいですね。