我在 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"
在这里,我使用了修改后的 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
。这里我使用的是journald:
$ 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 中?这是一个在登录时运行的文件。因此,当每个人都登录时或技术上在启动时它不会打开......但如果您使用一个用户,这可能是满足您需要的简单解决方案。
转到您的主目录,如果您是 root,则实际上是 /root 而不是 /home/root (至少在我熟悉的发行版中。也许“echo $HOME”来确认您的主目录。)
到达那里后,执行以下操作:
ls -la
应该会看到一个名为 .bash_profile 的隐藏文件,打开它并查看。大多数都注释了一些说明。您可以直接在那里运行脚本,或者只是使用以下命令调用它:
sh '/home/root/test.sh'