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을 통해 실행된다는 것을 알고 있을 때 디렉터리와 스크립트에 대한 절대 경로를 포함하는 것입니다.

관련 정보