多种服务的最佳方法

多种服务的最佳方法

警告: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

相关内容