【问题标题】:Run a script if no SSH connection如果没有 SSH 连接,则运行脚本
【发布时间】:2017-06-11 11:39:17
【问题描述】:

我正在尝试让脚本在启动时运行,但如果我通过 SSH 连接到我的 Raspberry Pi,则什么也不做。

到目前为止,我已经让 crontab 通过 @reboot sleep 30 && sudo bash ./checkssh.sh 自动运行脚本 checkssh.sh 并且 './checkssh.sh' 包含以下内容:

#!/bin/bash

if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then
  echo "SSH CONNECTED"
else
    ./autobackup.sh
fi

从 SSH 终端运行 checkssh.sh 会返回预期的“SSH CONNECTED”,并在 SSH 未正常连接时让它在重新启动时从 crontab 自动运行。但是,当它在启动时运行并且我在它可用时立即通过 SSH 连接时,它仍然运行脚本。我不确定这是哪里出了问题。

我需要它自动运行,如果没有 SSH 连接运行 autobackup.sh ,但如果有 SSH 连接,则不要运行任何东西。我用于 SSH 连接的设备可能不同,使用的网络也可能不同,因此依赖特定 IP 的脚本并不理想。

感谢您的帮助:)

【问题讨论】:

  • cronsshd 是两个非常独立的程序,它们都与启动时运行的服务无关。我不知道 Raspberry Pi 附带了什么,但您正在寻找正确配置类似 upstartsystemd 以在启动时运行 autobackup.sh

标签: linux bash ssh raspberry-pi


【解决方案1】:

那些环境变量(SSH_CLIENTSSH_TTY)仅在 SSH 会话的环境中设置。您不能从另一个流程中检查它们并期望它们在这里实现您的目标。

改为运行程序finger。这是查看谁已登录的标准方式。

【讨论】:

  • 不太确定如何使用finger。如果SSH_CLINET & SSH_TTY 仅在 SSH 连接后设置,我可以让这个脚本在登录 +30 秒时运行,并让 pi 自动登录吗?
【解决方案2】:

您可能需要在运行脚本之前添加一些延迟,以允许 SSH 服务启动。如果 cron 服务在 sshd 之前出现,你将会失败。试试:

@reboot sleep 60 && bash ./checkssh.sh

我也会用“。”来代替。使用完整的脚本路径。
在一种情况下,我必须添加多达 120 秒才能使 @reboot crontab 正常工作。但是 ssh 应该不需要那么多。我想你可以在它工作后根据你的需要修剪 60 秒。

【讨论】:

  • 我已经在 cronjob 上睡了一觉,并尝试了不同的时间。在autobackup.ssh 中有一个确认对话框,如果我在 60 秒内没有响应,它会超时并运行脚本的其余部分,或者我可以取消它。问题是这个对话没有输出到 SSH 终端,所以我无法按原样响应。我已经设法通过使用screen 来解决这个问题,以便脚本在一个新屏幕中运行,当我 ssh 进入时,我可以执行screen -r 并在那里看到对话。虽然看起来有点乱,但屏幕至少会让我在脚本运行时退出 ssh
猜你喜欢
  • 1970-01-01
  • 2011-06-21
  • 1970-01-01
  • 2016-10-12
  • 1970-01-01
  • 2021-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多