Linuxで起動時にBashスクリプトを実行する方法は?

Linuxで起動時にBashスクリプトを実行する方法は?

iMX7デュアル開発ボードでLinux 4.9.11-1.0.0を実行しています。test.sh起動時に実行したいファイルがあります。現在、echoテスト目的のためだけに多くのステートメントがあります。

ボードのスイッチを入れてオンにすると、多くの初期化項目が表示されるのを見ました。起動時に、ファイル内echoのステートメントがtest.shこの初期化シーケンスにも表示されるようにします。最終的にこのアプローチが成功したら、簡単な説明を実用的なものにecho変えることが計画です。この時点では、起動時にスクリプトが実行されることを確認したいと思います。

これまでファイルを作成しており、test.shボードの起動後に手動で実行できます。/etc/rc.localファイルの終わりの終了ステートメントの前に以下を追加しました。

sh '/home/root/test.sh'

rc.localファイルが一番上にあることを確認しました#!/bin/sh -e。私も次のことをしました。

$ chown root /etc/rc.local
$ chmod 777 /etc/rc.local

これをすべて実行したら、次のように入力して正しく機能していることを確認しました。

$ /etc/init.d/rc.local start

これまですべてが期待どおりに機能しており、echo最後のステップを実行するとステートメントを表示できます。ただし、ボードを再起動しようとすると、echo印刷された初期化内容にこれらのステートメントはまったく表示されません。

私は何を見逃していますか?実際に起動時に実行できますが、何らかの理由で出力が表示されませんか?

答え1

コマンドの実行など、すべての操作を完了した場合、表示chmod +x /etc/rc.localできる場所には記録されません。

はい

これは私のものです/etc/rc.local

$ cat /etc/rc.local
#!/bin/bash
touch /var/lock/subsys/local
echo "hickory stick"

ここでは、syslogに書き込む修正されたBashを使用しています。これについては他のU&L Q&Aで議論しました。bashの履歴をsyslogに送信する

システムが起動すると、Bashを介して記録され、次のメッセージが表示されます。

/var/log/bash-log/127.0.0.1.log:2018-07-24T22:04:24.609094-04:00 centos7 rc.local: ヒッコリースティック

しかし、他の場所ではそうではありません。これをsyslog / rsyslogに書き込むには、通常、logger次のコマンドを使用します。

$ logger hi

/var/log/messagesその後、またはまたはで/var/log/syslog表示できますjournal -xef。ここではジャーナルを使用しています。

$ journalctl -xef
Jul 24 20:23:04 centos7 bash[1629]: HISTORY: PID=1629 UID=0 USER=root CMD=man logger
Jul 24 20:23:24 centos7 bash[1629]: HISTORY: PID=1629 UID=0 USER=root CMD=logger hi
Jul 24 20:23:24 centos7 vagrant[1811]: hi

logger次のように、スクリプトでコマンドを使用して出力をキャプチャできるようにする必要があります。

$ cat /etc/rc.local
#!/bin/bash
touch /var/lock/subsys/local
echo "hickory stick" | logger

今再起動すると:

$ journalctl -xef
...
Jul 24 20:31:41 centos7 bash[1629]: HISTORY: PID=1629 UID=0 USER=root CMD=journalctl -xe
Jul 24 22:24:00 centos7 logger[1286]: hickory stick
Jul 24 22:24:00 centos7 sshd[1270]: Server listening on 0.0.0.0 port 22.
Jul 24 22:24:00 centos7 sshd[1270]: Server listening on :: port 22.
Jul 24 22:24:00 centos7 systemd[1]: Starting Permit User Sessions...

loggerに追加されたメッセージで私たちのメッセージを見ることができます/etc/rc.local

追加情報

loggerとても便利です。スイッチを経由するのではなくファイルに書き込むこともできます。-fスイッチを使用して、ログに表示されるタグを制御することもできます-t

$ logger -t "smurfs" hi
$ journalctl -xe | grep smurfs
Jul 24 20:38:24 centos7 smurfs[1764]: hi

引用する

答え2

.bash_profileに入れてみましたか?ログイン時に実行されるファイルです。したがって、誰もがログインしたり技術的に起動したりすることはありません。ただし、1人のユーザーを使用している場合、これはあなたのニーズに合った簡単な解決策です。

ルートの場合は、実際には/home/rootではなく/rootのホームディレクトリに移動します。 (少なくとも私がおなじみのディストリビューションでは、「echo $ HOME」を使用してホームディレクトリを確認できます。)

そこで以下を行います。

ls -la

.bash_profileという隠しファイルが表示されたら、開いて見てください。ほとんどの場合、いくつかの指示がコメントとして追加されています。ここでスクリプトを直接実行するか、次を使用して呼び出すことができます。

sh '/home/root/test.sh'

関連情報