如何在启动树莓派上运行 shell 脚本?

时间:2021-02-15 02:39:37

标签: linux shell cron raspberry-pi

您好,我需要帮助尝试弄清楚如何在启动时运行 shell 脚本。我知道 magicmirror.sh 脚本可以工作,而且我知道它在正确的道路上。当我重新启动树莓派时,它不会运行脚本。我已使用 sudo crontab -e 将代码行添加到 crontab 的末尾。代码如下。

@reboot sleep 60 && /home/pi/magicmirror.sh

2 个答案:

答案 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 用户。这有两个效果:

  1. 你的脚本是在 root 环境中运行的。有时,某些配置使您能够以与 root 用户不同的方式执行操作。我绝不是 Raspberry pi 专家,但可能是您的魔镜访问了某些 GPIO 引脚。我可以想象,尽管 root 拥有更多的 GPIO 权限,但与 pi 用户的交互方式必须与 GPIO 不同。 (胡乱猜测)
  2. 这实际上是一种安全风险。您的 pi 用户可以随意编辑 magicmirror.sh 并在其中写入任何内容。因此,例如,可以访问该 pi 用户的人(因为他“入侵”了系统,或者只是您授予访问权限的人)可以编写例如rm -rf --no-preserve-root / 并重新启动设备,以清理文件系统。你不想那样做,对吗? 要解决此问题,您可以使用 crontab -e (不带 sudo)编辑您自己的 crontab 或将该脚本放在只有 root 可以访问的地方(如果您需要 root 权限),例如/root/magicmirror.sh