我无法让 sh 脚本在 rc.local 中启动时运行

我无法让 sh 脚本在 rc.local 中启动时运行

这是我的/etc/rc.local:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

sh /home/ubuntu/Desktop/camset.sh
exit 0

当我 cd 进入 /etc 并运行 /home/ubuntu/Desktop/camset.sh 时,脚本运行良好。该脚本仅使用 v4l2-ctl 设置相机滤镜。脚本运行时是否有可能相机尚未连接/设置?我还确保使用 chmod 使脚本可执行。

更新:这是我的新 rc.local 文件:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

/usr/bin/screen -dmS autostart bash -c '/home/ubuntu/Desktop/camset.sh'
deflog on
logfile /tmp/screenlog_$USER_.%H.%n.%Y%m%d-%0c:%s.%t.log
exit 0

tmp/目录中唯一的东西是:config-err-sHJlFD unity_support_test.0

答案1

原因可能有很多,而且我们不知道您的脚本在做什么。我要做的就是添加一些日志记录以了解发生了什么。

参见示例:rc.local 的日志文件在哪里?

另一种方法(我更喜欢)是使用屏幕命令在其自己的终端会话中启动该进程。

先决条件:

apt-get install screen

然后你可以将这样的内容添加到你的 local.rc 文件中

/usr/bin/screen -dmS autostart bash -c '/home/ubuntu/Desktop/camset.sh'

为了保留屏幕控制台的日志,还创建一个文件 /root/.screenrc ,如下所示:

deflog on
logfile /tmp/screenlog_$USER_.%H.%n.%Y%m%d-%0c:%s.%t.log

重新启动后,您可以检查日志文件(在本示例中,它存储在 /tmp 中)。

PS:如果脚本没有返回,您可能需要在脚本后添加一个与号(&),这可能会阻止计算机启动。

请注意,rc.local 将以 root 身份执行。

相关内容