だから私のサーバーは起動時に複数のtmuxセッションを開始するスクリプトを実行したいと思います。
これは私のクローンタブです:
@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ではなくプライベートcrontabで実行されていることを確認してください。一般ユーザーとして実行しようとすると、すべてが混乱します。
また、私がコメントで述べたように、cronを介して実行されるスクリプトに絶対パスを含めることは決して悪いことではありません。~/something
またはを参照する複数のインスタンスがあると思います./somescript
。たとえば、ディレクトリの場所を間違えないように、代わりにcd ~/Scripts
使用してください。cd /home/username/Scripts
source
.profile
これは通常、$HOME
変数()が設定される場所であるため、-ingの要点です。~
違いを避ける方法は、タスクがcronを介して実行されることを知っているときにディレクトリとスクリプトへの絶対パスを含めることです。