如何在 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"

在这里,我使用了修改后的 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'

相关内容