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'