首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Linux上启动时运行Bash脚本?

如何在Linux上启动时运行Bash脚本?
EN

Unix & Linux用户
提问于 2018-07-24 20:59:23
回答 2查看 8.6K关注 0票数 1

我在我的iMX7双开发板上运行Linux4.9.11-1.0.0。我有一个test.sh文件,我想在启动时运行。目前,它中只有一堆echo语句(只是为了测试目的)。

当我按下板上的开关打开它时,我看到一堆初始化的东西出现了。我希望我的echo文件中的test.sh语句在启动时也显示在这个初始化序列中。最终,一旦这起作用,计划是做真正的事情,而不是简单的echo语句。我只想确保脚本在此时启动时运行。

到目前为止,我已经创建了test.sh文件,并且能够在板启动后手动运行它。在结束exit语句之前,我将以下内容添加到我的/etc/rc.local文件中:

代码语言:javascript
复制
sh '/home/root/test.sh'

我已经验证了这个rc.local文件的顶部有#!/bin/sh -e。我还做了以下工作:

代码语言:javascript
复制
$ chown root /etc/rc.local
$ chmod 777 /etc/rc.local

完成所有这些之后,我通过键入以下内容验证了它是否正常工作:

代码语言:javascript
复制
$ /etc/init.d/rc.local start

在此之前,一切都按预期进行,在完成最后一步时,我将看到echo语句。然而,当我去尝试重新启动板时,我根本看不到打印的初始化内容中的echo语句。

我遗漏了什么?也许它实际上是在启动时运行的,但由于某种原因,我没有看到输出?

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2018-07-25 00:34:05

如果您已经完成了诸如chmod +x /etc/rc.local之类的所有操作,那么您的命令就会运行,只是在任何地方都看不到它的记录。

示例

这是我的/etc/rc.local

代码语言:javascript
复制
$ cat /etc/rc.local
#!/bin/bash
touch /var/lock/subsys/local
echo "hickory stick"

在这里,我使用了修改后的Bash,它记录到syslog,我在另一个名为:向syslog发送bash历史记录的U&L问答中讨论了这个问题。

当我的系统启动时,我看到以下消息通过Bash记录:

/var/log/bash-log/127.0.0.1.log:2018-07-24T22:04:24.609094-04:00 centos7 rc.local:山核桃棒

但没有其他地方。要将其记录到syslog/rsyslog,通常可以使用logger命令这样做:

代码语言:javascript
复制
$ logger hi

然后,您可以在/var/log/messages/var/log/syslogjournal -xef中看到它。我用的是日记:

代码语言:javascript
复制
$ 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从脚本中的命令中捕获输出,如下所示:

代码语言:javascript
复制
$ cat /etc/rc.local
#!/bin/bash
touch /var/lock/subsys/local
echo "hickory stick" | logger

现在,当我们重新启动:

代码语言:javascript
复制
$ 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开关控制日志中显示的标记。

代码语言:javascript
复制
$ logger -t "smurfs" hi
$ journalctl -xe | grep smurfs
Jul 24 20:38:24 centos7 smurfs[1764]: hi

参考资料

票数 0
EN

Unix & Linux用户

发布于 2018-07-24 21:53:08

你试过把它放进你的.bash_profile里吗?这是一个在登录时运行的文件。所以当每个人都登录或者技术上说是在创业时,它就不会打开了.但是,如果您使用的是一个用户,这可能是一个简单的解决方案,您需要什么。

转到您的主目录,如果您是root用户,它实际上是/root not / home /root (至少在我熟悉的发行版中是如此)。也许"echo $HOME“来确认您的主目录。)

一旦到了那里,就做:

代码语言:javascript
复制
ls -la

应该会看到一个名为.bash_profile的隐藏文件,打开它并查看一下。大多数都有一些注释。您可以直接在那里运行您的脚本,也可以通过以下方式调用它:

sh '/home/root/test.sh'

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/458227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档