メニュー ホーム

rc.localの書式

kubuntuに起動時にメールを出すスクリプトをセットしたつもりだったけど、動作しない。無知をさらけ出すことになりますが、書式がしっかりしてなかったんですわ。

経緯

Kubuntuはモニターにつなげてはあるのですが、通常モニターはアクティブになっていません。入力を切り替えてやればモニターに映るんですが、ここ数ヶ月事実上のヘッドレスマシンになっています。

簡単なスクリプトなどの実験台になってくれているのですが、時々リスタートさせる必要があります。そこで、ちゃんと起動してくれたのか確かめるために、極簡単なスクリプトを書いてそれを/etc/rc.local に書き込んだつもりでした。

動かないスクリプト

ところがですね。動かないんですよ。何度リスタートしても動かない。スクリプトをコマンドプロンプトに打ち込んでやれば動く。何度テストしてもコマンドプロンプトに打ち込んでやれば動くんですね。メールがちゃんと届く。でも、rc.localに書き込んだのは動かない。

ググってみると、systemctlでステータスを確認できるらしい。それすら知らなかった。早速やってみました。エラーでてましたよ。Failed to execute command: Exec format errorこれもググってみました。そのものズバリの答えはなかなか見つかりませんでしたが、しかしよくよく考えてみると、エラーを翻訳してみると「コマンドの実行に失敗しました。実行形式エラー」実行形式?

とってもシンプルな答え(無知だった)

「コマンドの実行に失敗しました。実行形式エラー」何度も読んでいたら、答えにたどり着きました。シバン(shebang)ですね。スクリプトを書くときに、1行目に必ず書く、アレです。スクリプトの本文をいきなり書いていたんです。無知ですね。恥ずかしいです。コマンドプロンプトに書き込んだときには、コマンドプロンプトがMacの場合zshだったりしますが、いちいち明示しなくてもzshが解釈してくれます。しかし、rc.localの場合、一体どのインタプリタを指定しているのかわかりませんよね。私シパンを書いていませんでした。恥ずかしい。

Kubuntuの場合、bashを指定してやれば間違いないだろうと思ったら、ビンゴでした。ステータスを確認したらちゃんと動いてくれてるのを確認できましたし、メールも届きました。

まとめ

まとめもへったくれもありませんが、同じように設定したRaspberry Piなどでは問題なかったのに、なぜKubuntuでシパンを抜かしていたのか? 実は、Raspberry Piなどではrc.localファイルはもともと存在していて、スクリプトが書き込まれていました。Kubuntuはrc.localファイルが存在しなかったんですね。そのため、シパンを抜かして書き込んで「これでOK」と思っていたんです。

無知の言い訳にしかなりませんが、そういうことです。恥ずかしいけど、自分への戒めもこめてエントリーにしました。

投稿者プロフィール

會澤 賢一
新潟県在住。1964年生まれ、東京オリンピックの年ですね。
突然燃え上がったり、鎮火したり興味の波が激しいので注意が必要です。

カテゴリー:Linux

會澤 賢一

新潟県在住。1964年生まれ、東京オリンピックの年ですね。
突然燃え上がったり、鎮火したり興味の波が激しいので注意が必要です。

お気軽にコメントを残していってください