CrontabとTmuxは一緒にうまく機能しません

CrontabとTmuxは一緒にうまく機能しません

だから私のサーバーは起動時に複数の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を介して実行されることを知っているときにディレクトリとスクリプトへの絶対パスを含めることです。

関連情報