警告:Linux 新手请点击此处
我得到了我的第一台树莓派,我想在上面同时运行多个程序。树莓派无需任何操作即可连接到 wifi。
我想运行几个仪表板……其中一个是粉碎。由于这些类型的服务将占用 CLI 屏幕,因此在服务运行时您无法执行任何其他操作。
到目前为止,我所做的是使用 Screen,我创建了一个 Screen,运行服务并分离。但这给我带来了麻烦。因为我希望屏幕在我启动时自动运行(使用 crontab -e)。问题是 Smashing 命令不起作用。当我手动设置屏幕时它会起作用,但是当我通过 Crontab 设置屏幕时我遇到了 PATH 问题。
我的问题是:
我这样做对吗?Screen 是实现以下目标的方法吗:
- 在以下位置运行服务分离windows,这样我仍然可以使用 CLI那
- 可以配置为在重启时自行启动服务吗?
我在一个文件夹中创建了几个脚本,/scripts/
例如其中一个脚本如下:
echo "Looking up the Dashboard and running file"
ls
cd dashboard
ls
smashing start
echo "Operation completed."
此脚本应在启动时通过以下方式调用:
@reboot screen -dmS "dashboard" bash -c "./scripts/smashing.sh ; bash"
但由于某些路径问题,它无法工作:
./scripts/smashing.sh: line 5: smashing: command not found
这很奇怪,因为这只有在我启动屏幕时才会发生重启时通过 crontab 执行。 如果我自己在 CLI 中手动启动一个屏幕,服务就会正常加载。
答案1
解释:让我们反汇编一下实际的错误输出:
./scripts/smashing.sh: line 5: smashing: command not found
这意味着在脚本的第 5 行,解释器发现了一个smashing
无法找到二进制文件的命令 ()。
您说得对,这是 $PATH 问题。Cron 是难题的另一个部分。
Cron 在运行作业时不会使用大多数环境变量。这意味着 cron 不知道你的$PATH(像安装一样改变smashing
)。
对于刚接触 cron 作业的用户来说,这是一个经典的学习点。
正是出于这个原因,老手建议在 cron 作业(以及它们触发的脚本)中始终使用完整路径。
解决方案:在您的脚本中,使用完整路径:
用于whereis smashing
了解完整路径。
然后编辑你的脚本。
OLD: smashing start
NEW: /full/path/to/smashing start