Linux 시작 시 git 저장소를 가져오는 방법

Linux 시작 시 git 저장소를 가져오는 방법

부팅 시 git 저장소의 최신 복사본을 가져올 수 있도록 연구실에 Kali Linux 2021(zsh 포함) 머신을 두고 싶습니다. 수동으로 명령을 제대로 실행할 수는 있지만 시작 시 명령을 실행할 수는 없습니다. 저장소는 로그인이 필요하지 않은 공개 저장소입니다. 변경 사항을 취소하고 최신 파일을 가져오는 명령은 다음과 같습니다.

/usr/bin/git -C /home/user/localrepo reset --hard main
/usr/bin/git -C /home/user/localrepo pull

.profile, 에 이러한 명령을 추가하고 crontab에서 재부팅 시 실행할 스크립트를 생성하려고 시도했지만 .bash_login다른 방법에 대한 아이디어가 부족했습니다. 왜 시작 시 작동하지 않는지 모르겠습니다./etc/network/if-up.d/script.sh/etc/profile.d/

어떤 도움이라도 대단히 감사하겠습니다.

[편집] Kali VM이 시작된 후 약 45초 후에 로드되는 게이트웨이가 있는 가상 랩 환경에서 실행되고 있으므로 이 문제를 해결해야 한다는 점을 추가해야 합니다. 이것이 스크립트가 실행되지 않는 이유일 수 있습니다. 이러한 의견을 해결하기 위해 오류가 발생하지 않습니다. 소위 git 로그를 확인했지만 아무것도 표시되지 않습니다.

답변1

systemd를 사용하여 다음과 같은 방법으로 이 작업을 수행할 수 있습니다.

# $HOME/.config/systemd/user/gitpull.service
[Unit]
Description=Pulling recent git repo

[Unit]
Type=oneshot
ExecStart=/usr/bin/git -C %h/localrepo reset --hard main
ExecStart=/usr/bin/git -C %h/localrepo pull

[Install]
WantedBy=default.target

그런 다음 테스트해 보세요.

$ systemctl --user start gitpull

만족스러우면 다음 명령을 사용하여 로그인 시 실행되도록 할 수 있습니다.

$ systemctl --user enable gitpull

노트:

  • 이는 --user기본 버스 대신 버스를 사용합니다 --system. 이는 컴퓨터가 시작될 때가 아니라 사용자가 로그인할 때 실행되기를 원하기 때문입니다. 또한 파일을 사용자(이 아닌 root)가 소유하게 하려고 합니다. 이 명령을 루트로 실행 하지 마십시오 systemctl.
  • 정말로 버스에서 실행하고 싶다면 해당 섹션 에 --system추가해야 합니다 .User=[Unit]
  • 서비스가 activating운영되는 동안 볼 수 있으며 dead서비스가 완료되면 볼 수 있습니다. 그런 성격이니까 Type=oneshot보시고 당황하지 마세요 dead.
  • WantedBy=default.target이는 "로그인"이 TTY 또는 SSH를 통해 이루어지는 경우에도 이 스크립트가 실행된다는 의미입니다. LightDM이 이를 트리거하지만 다른 것들도 마찬가지입니다. 그래픽 로그인을 통해서만 이 작업을 실행하려는 경우에 사용하십시오 WantedBy=graphical-session.target.
  • %h사용자 홈 디렉토리의 약어입니다.
  • 당신 -C %h/localrepo은로 대체 할 수 있습니다WorkingDirectory=%h/localrepo

답변2

결국 LightDM GUI의 LightDM 세션 및 실행 도구를 사용하여 로그인 시 시작되도록 스크립트를 설정했는데 제대로 작동했습니다. 사용자가 로그인할 때까지 스크립트가 실행되지 않습니다. 이것이 바로 제가 원하는 것입니다. 일반 파일 위치에서는 왜 작동하지 않는지 아직 잘 모르겠지만 LightDM/Zsh가 원인인 것으로 의심됩니다.

[편집] 한 가지 주요 문제는 가상 환경의 게이트웨이가 나타나기 전에 스크립트가 실행되고 있다는 것입니다. GitHub에서 가져오기 위해 다른 스크립트를 실행하기 전에 이를 확인하기 위해 래퍼 스크립트를 만들었습니다. 동일한 스크립트에 넣을 수도 있지만 래퍼를 사용하는 것을 선호합니다.

#/home/kali/bin/git-check.sh "<cmd to run>"
#!/bin/bash
# Give networking a chance to come up
printf "Waiting for Internet connectivity\n"
RESPONSE=0
while [ $RESPONSE != 2 ] && [ $RESPONSE != 3 ]
do
        RESPONSE=$(curl -s --max-time 2 -I http://github.com | sed 's/^[^ ]*  *\([0-9]\).*/\1/; 1q')
        case $RESPONSE in
                [23]) printf "\nHTTP connectivity is up\n";;
                5) printf "\nAccess denied or server error\n";;
                *) printf "\nThe network is down or very slown\n";;
        esac
done
$1

관련 정보