您好,我需要帮助尝试弄清楚如何在启动时运行 shell 脚本。我知道 magicmirror.sh 脚本可以工作,而且我知道它在正确的道路上。当我重新启动树莓派时,它不会运行脚本。我已使用 sudo crontab -e
将代码行添加到 crontab 的末尾。代码如下。
@reboot sleep 60 && /home/pi/magicmirror.sh
答案 0 :(得分:0)
我认为这是权限问题。 尝试使用不带 sudo 的 crontab -e。
答案 1 :(得分:0)
问题可能在于您在脚本中调用命令的方式。
由于 crontab 从非常小的 shell 运行,因此并非所有环境变量都被加载。
因此,可能 $PATH
变量丢失/未完全加载,因此找不到您从脚本内部调用的某些二进制文件。
我猜你的脚本以 #!/bin/bash
开头。如果我的猜测是正确的,请尝试使用 #!/bin/env /bin/bash
启动 te 脚本(这意味着“以完整环境启动 bash”)或将脚本中的所有调用/命令替换为它们的完整路径。例如/usr/local/bin/myprog dosomething
而不是 myprog dosomething
。
编辑:
正如@shv 提到的,这也可能是权限问题。但也许以不同的方式。如果您运行 sudo crontab -e
,您正在编辑 root
的 crontab,而不是您的 pi
用户。这有两个效果:
root
拥有更多的 GPIO 权限,但与 pi 用户的交互方式必须与 GPIO 不同。 (胡乱猜测)magicmirror.sh
并在其中写入任何内容。因此,例如,可以访问该 pi 用户的人(因为他“入侵”了系统,或者只是您授予访问权限的人)可以编写例如rm -rf --no-preserve-root /
并重新启动设备,以清理文件系统。你不想那样做,对吗?
要解决此问题,您可以使用 crontab -e
(不带 sudo)编辑您自己的 crontab 或将该脚本放在只有 root 可以访问的地方(如果您需要 root 权限),例如/root/magicmirror.sh