【问题标题】:how to run a shell script on startup raspberry pi?如何在启动树莓派上运行 shell 脚本?
【发布时间】:2021-05-17 23:46:45
【问题描述】:

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

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

【问题讨论】:

    标签: linux shell cron raspberry-pi


    【解决方案1】:

    我认为这是权限问题。 尝试使用不带 sudo 的 crontab -e。

    【讨论】:

    • 这不太可能。当他使用sudo crontab -e 时,作业被写入root 的crontab。这实际上会给他更多的权限来运行这个脚本,因为作业是以 root 身份执行的。
    【解决方案2】:

    问题可能是您在脚本中调用命令的方式。 由于 crontab 从非常小的 shell 运行,因此并非所有环境变量都被加载。 所以可能$PATH var 丢失/未完全加载,因此找不到您从脚本内部调用的一些二进制文件。

    我猜你的脚本以#!/bin/bash 开头。如果我的猜测是正确的,请尝试使用 #!/bin/env /bin/bash 启动脚本(这意味着“使用完整环境启动 bash”)或将脚本中的所有调用/命令替换为其完整路径。例如/usr/local/bin/myprog dosomething 而不是 myprog dosomething

    编辑: 正如@shv 提到的,这也可能是权限问题。但也许以不同的方式。如果您运行sudo crontab -e,您正在编辑root 的crontab,而不是您的pi 用户。这有两个效果:

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

    【讨论】:

      猜你喜欢
      • 2023-01-08
      • 2015-03-22
      • 1970-01-01
      • 2015-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多