通过 crontab 创建 tmux 会话时,在"tmux 新会话 -d"命令中指定.bash_profile源路径不起作用



我要实现什么? 我正在尝试让 crontab 杀死以前的 tmux 会话并创建一个新的 tmux 会话(具有特定的 teamocil 设置)。

crontab 运行的简单 bash 脚本:

#!/bin/bash
tmux kill-session;
tmux new-session -d "source /home/qa/.bash_profile;teamocil settings;";

我遇到的问题? 手动运行此脚本可以正常工作,但是当通过 crontab 运行时,它只有在至少存在 2 个其他 tmux 会话的情况下才会起作用,即它会杀死一个会话作为脚本的一部分,如果没有会话,crontab 将不会创建第一个会话。如果在终止会话后仍有另一个会话可用,则脚本可以工作。

到目前为止的调查结果? 我发现如果我将源代码声明为 bash 脚本的一部分,而不是在 tmux 新会话命令中,那么它就可以正常工作。为什么会这样?请参阅下面修改后的脚本:

#!/bin/bash
source /home/qa/.bash_profile
tmux kill-session;
tmux new-session -d "teamocil settings;";

了解为什么这会有所作为,帮助我更新其他脚本并且不再犯这个错误,这将非常有帮助。对此的任何了解都是值得赞赏的。

直接在 crontab 行中将配置文件路径放在脚本路径之前,这将使脚本更灵活,以供将来使用。

解释 https://serverfault.com/questions/337631/crontab 执行没有与执行用户相同的环境变量

非常好的答案 https://unix.stackexchange.com/questions/27289/how-can-i-run-a-cron-command-with-existing-environmental-variables

另一个非常好的答案 https://unix.stackexchange.com/questions/6790/executing-a-sh-script-from-the-cron

推荐: 某处可能有问题的答案。人们只需要搜索它。

最新更新