Crontab 和 Tmux 不能很好地协同工作

Crontab 和 Tmux 不能很好地协同工作

所以我希望我的服务器运行一个脚本,该脚本在启动时启动多个 tmux 会话。
这是我的 crontab:

@reboot . /home/steven/.profile; /home/steven/Scripts/Start.sh  

这是我的 Start.sh 的内容

#!/bin/bash  

cd ~/Scripts/  

echo "Mounting all drives..."
sudo mount -a
echo "Mounting finished."

echo "Starting Wemo Server..."
tmux new -s "wemo" -d
tmux send -t "wemo" $'./start_wemo_server.sh\n'
if (tmux list-sessions | grep "wemo");
    then
        echo "Wemo Server Ouimeaux started."
    else 
        echo "Tmux error @ wemo server."
fi

echo "Starting GoDaddy Dynamic DNS Service..."
tmux new -ds "godaddy"
tmux send -t "godaddy" $'./start_godaddy_dyndns.sh\n'
if (tmux list-sessions | grep "godaddy");
    then
        echo "GoDaddy Dynamic DNS Service started."
    else
        echo "Tmux error @ GoDaddy."
fi

echo "Starting Plex..."
sudo service plexmediaserver start
echo "Plex started."

echo "Starting PlexConnect Server..."
tmux new -ds "plex"
tmux send -t "plex" $'./start_plex_connect.sh\n'

if (tmux list-sessions | grep "plex");
    then
        echo "PlexConnect Server started."
    else
        echo "Tmux error @ Plex."
fi

echo "All starting sequences are finished. Quitting..."  

如果我手动启动此脚本(即 ./Scripts/Start.sh),一切都会正常工作,tmux 会很好地加载我的配置文件,一切都很好。但是,如果我设置 crontab 来启动此脚本,tmux 不会加载配置文件,.bashrc 不会加载,我什至无法使用向上箭头键来调用以前的命令,或使用 Tab 来自动完成。

这真的很烦人,因为我白天一直使用 tmux,我无法忍受 tmux 会话损坏。

有谁知道如何解决这个问题或者我做错了什么?

谢谢。

答案1

无论您的个人设置加载到何处,根据操作系统和首选项,您都需要source在脚本中使用该文件,以便它能够像您自己在终端中运行它一样运行。

source.是功能类似于import其他脚本/编程语言的命令。另请注意,如果您使用.而不是,则 和您要获取的配置文件的路径source之间应该有一个空格:.

. /home/username/.profile

在脚本的开头,之后#!/bin/bash,只需添加source /home/yourusername/.profile(或.bashrc任何您用来加载设置的内容)。

仔细检查该文件的权限/所有权,并确保它在您的个人 crontab 中运行,而不是 root 的 crontab 中运行,如果您尝试以普通用户身份运行它,这会弄乱一切。

另外,就像我在评论中所说的那样,在通过 cron 执行的脚本中包含绝对路径永远不会有坏处。我相信您有多个实例引用~/something./somescript。例如,cd ~/Scripts使用代替cd /home/username/Scripts,这样就不会弄错该目录所在的位置。

source这就是-ing your的要点.profile,因为这通常是设置$HOME变量 ( ) 的地方。~避免任何差异的方法是,当您知道作业将通过 cron 执行时,只需包含目录和脚本的绝对路径即可。

相关内容