代码之家  ›  专栏  ›  技术社区  ›  SCoyle

通过crontab创建tmux会话时,指定。'tmux new session-d'命令中的bash\u profile源路径不起作用

  •  6
  • SCoyle  · 技术社区  · 6 年前

    我在努力实现什么? 我试图让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 new sessions命令中,那么它就可以正常工作。为什么会这样?请参见下面有效的修改脚本:

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

    理解为什么这会产生影响,帮助我更新其他脚本,避免再次犯下这个错误,这将非常有帮助。任何能说明这一点的信息都将不胜感激。

    1 回复  |  直到 6 年前
        1
  •  1
  •   iuooip    6 年前

    在crontab行中直接将概要文件的路径放在脚本的路径之前,这将使脚本在将来的使用中更加灵活。

    解释 https://serverfault.com/questions/337631/crontab-execution-doesnt-have-the-same-environment-variables-as-executing-user

    回答得很好 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

    建议: 你的问题可能有答案。一个人只需要去寻找它。