我使用 Ubuntu 16.04,我需要以下tmux解决方案,因为我想运行超时过程,sleep因为在我的特定情况下,我不满意at并遇到了错误nohup(组合时nohup-sleep)。现在,它tmux似乎是最好的选择,因为它有自己的无挂断机制,并且在手动使用中实际上工作正常(我只问关于自动化我已经可以手动使用它的过程的问题)。
我需要一种方法来执行以下 3 个操作,全部在一个操作中:
tmux会话。(sleep 30m ; rm -rf dir_name ; exit). 我特别喜欢多行设置,而不是一排长排。tmux会话中写入为标准输入。换句话说,我想在另一个tmux专门为该原因创建的会话中执行代码集,但要在一个操作中完成所有操作。
我的目标是在我最初的工作会议(我大部分时间工作的那个会议)中完成所有工作。通常,我无意访问新创建的会话,我只想使用其自动执行的代码创建它,仅此而已。
如果可能,我更喜欢 heredoc 解决方案。我认为这是最有效的。
Mar*_*ale 35
如果将要执行的代码放在 eg 中/opt/my_script.sh,则很容易执行您想要的操作:
tmux new-session -d -s "myTempSession" /opt/my_script.sh
Run Code Online (Sandbox Code Playgroud)
这将启动一个名为“myTempSession”的新分离会话,执行您的脚本。您可以稍后附加到它以检查它在做什么,通过执行tmux attach-session -t myTempSession.
在我看来,这是最直接、最优雅的解决方案。我不知道使用 tmux 从标准输入(读取“来自heredocs”)执行命令的任何简单方法。通过在周围进行黑客攻击,您甚至可以做到这一点,但它仍然(并且看起来)是一次黑客攻击。
例如,这里有一个 hack,它使用我上面建议的命令来模拟您想要的行为(= 在来自 heredoc 的新 tmux 会话中执行代码。服务器的硬盘驱动器上没有写入,因为创建了临时文件/dev/shm,这是tmpfs):
(
cat >/dev/shm/my_script.sh &&
chmod +x /dev/shm/my_script.sh &&
tmux new-session -d '/dev/shm/my_script.sh; rm /dev/shm/my_script.sh'
) <<'EOF'
echo "hacky, but works"
EOF
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
36589 次 |
| 最近记录: |