所以我希望我的服务器运行一个脚本,该脚本在启动时启动多个 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 执行时,只需包含目录和脚本的绝对路径即可。