警告:这里是 Linux 新手
我得到了我的第一个树莓派,我想在它上面托管一些同时运行的东西。Pi无头连接到wifi。
我想运行几个仪表板......其中一个是Smashing。由于此类服务将占用 CLI 屏幕,因此在服务运行时您无法执行任何其他操作。
到目前为止,我所做的是,使用 Screen,我创建了一个 Screen,运行服务并分离。但这给我带来了麻烦。因为我希望屏幕在我启动时自动运行(使用 crontab -e)。问题是 Smashing 命令不起作用。当我手动做一个屏幕时它会起作用,但是当我通过 Crontab 设置一个屏幕时,我会遇到 PATH 问题。
所以我的问题是:
我正确地接近这个吗?屏幕是去的方式:
- 在单独的窗口中运行服务,以便我仍然可以使用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 中手动启动一个屏幕,该服务将正常加载。
解释:让我们反汇编实际的错误输出:
这意味着在脚本的第 5 行,解释器找到了一个命令 (
smashing
),它无法找到它的二进制文件。你是对的——这是一个 $PATH 问题。Cron 是另一个难题。
Cron 在运行作业时不会使用您的大部分环境变量。这意味着 cron 不知道对您的$PATH 的更改(例如安装的更改
smashing
)。对于刚接触 cron 作业的用户来说,这是一个经典的学习点。
正是出于这个原因,老手建议始终在 cron 作业(以及它们触发的脚本)中使用完整路径。
解决方案:在您的脚本中,使用完整路径:
用于
whereis smashing
学习完整路径。然后编辑你的脚本。