shell 在headless debian的前台自动启动脚本

42fyovps  于 2022-12-13  发布在  Shell
关注(0)|答案(1)|浏览(157)

有人知道怎么做吗?帮助将是非常感谢的,我已经敲打我的头在这一个有一段时间了,我似乎找不到任何方法来让脚本自动启动,并显示在前台,因为他们会,如果我手动启动他们。
我想做的基本上就是打开虚拟机,让它 Boot ,然后观察脚本运行并将结果回显到控制台,或者如果手动运行,脚本通常会显示的任何内容
我已经能够使用Cron和systemd来运行我希望在启动时运行的脚本,但是我无法找到任何方法来使这些脚本在屏幕中运行,就像我键入./startup_script.sh时那样
我目前正在一个无头Debian 11虚拟机中测试一切。自动登录作为根已经启用。我只需要完成这最后一步,但我不知道如何做。

mbzjlibv

mbzjlibv1#

您可以启动一个tmux会话并向其发送密钥来启动一个脚本,如下所示:

tsid="session_name"
my_script="/home/script.sh"

# create new tmux session
tmux new-session -d -s ${tsid}
  
# launch the script in the tmux session
echo "launching script in a tmux session called ${tsid}"
tmux send-keys -t ${tsid} "${$my_script}" 'C-m'

我做了一些类似的事情来启动一个“四窗格”到我的raspberry pi设备。我可以通过ssh发送命令到每个窗格,而不需要看我发送命令到的屏幕。我可以从任何ssh会话发送命令到窗格,而不需要实际连接到一个gui,或者在“会话”中。这样,另一台机器可以在监视显示器上打开该会话,我可以通过命令向主机发送ssh,它将在那里显示,而不必实际连接到窗口。这些窗格可以运行脚本,并在每个屏幕/窗格上显示输出,等待我稍后连接并查看。我会不时地打开我的四路馈送,看看发生了什么...然后断开连接,让它全部运行。

# function to send an arbitrary command to a tmux pane
# arg1: full id of pane, e.g. "pi4-host01:quad-feed.0"
# arg2+ command(s) to send to pane
tmux_send_command_to_pane_id() {
  local tpid cmd
  tpid="${1:-0}"
  cmd="${@}"
  echo "cmd to send to pane: ${tpid}: ${cmd}"
  tmux send-keys -t "${tpid}" "${cmd}" 'C-m'
}

如果你用cron或systemd来搭配这样的东西,我想你可以相对快速地达到你的目标。这确实取决于安装tmux。我知道其他人使用screen,但我已经成为tmux的粉丝了。
关于systemd脚本的一个很好的答案-〉https://unix.stackexchange.com/a/47715/376937
下面是另一个可能也有帮助的问题:Tmux command to run shell command on active pane?

相关问题