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 」と思っていたんです。

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

投稿者プロフィール

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA