Untitled

<aside> 📚 목차

</aside>

<aside> ⚠️ github 커밋 자동화 프로그램

위 게시물과 연결되는 내용입니다.

먼저 이 게시물 먼저 읽고 와주세요.

</aside>

기존에 작성했던 커밋 자동화 프로그램은 성능은 참 좋은데 뭔가 시각적으로 아쉬워서, 겉멋 강화버전을 가져왔다.

특정 시간마다 서버에서 이미지url을 불러와 commit

1. 랜덤이미지를 가져올 수 있는 사이트들

Lorem Picsum

Google Arts & Culture

Random art: gallery

Random art gallery의 작품들이 뭔가 있어보여서 해당 링크 기준으로 작업할겁니다.

Untitled

다음과 같은 사이트화면이 보일겁니다. make yout own 부분에서 직접 작품을 제작해 업로드할수도 있습니다. 재미있는 사이트네요

Untitled

아무 이미지나 클릭해서 들어가면 규칙이 일관된 이미지 URL 정보를 확인할 수 있습니다.

URL구조가 가장 단순하여 따로 서버에 요청하여 이미지를 불러오는것이 아니라, 단순하게 shell script 로 난수를 생성하여 랜덤으로 이미지를 불러오는 작업을 할겁니다.

서버에 js를 깔고 직접 서버에 요청하고싶다면 다음 방법을 참고해주세요 (정리안됨 사실 잘 모름 나도)

2. git clone 으로 README.md 프로필 불러오기

혹시 프로필 README.md 가 생성되지 않으셨다면 다음 글에서

Step 01. Repositories 생성

부분까지만 하고 오시길 바랍니다.

[Github] 프로필 꾸미기

서버에 접속해줍시다 (전 구글 클라우드 Ubuntu20 환경 사용중)

원하는 디렉토리로 이동하여 다음 코드를 입력해줍시다.

username 부분을 당신의 github username으 바꿔주는거 잊지 마세요.

git clone <https://github.com/username/username.git> 

새로운 git 디렉토리기 때문에, 자동으로 커밋해주는 스크립트를 또 생성해줘야합니다.

cp 복사할파일이름 이동위치를 이용하여 기존의 commit.sh 현재 폴더로 복사해줘도 좋지만, 그냥 새롭게 작성하겠습니다.

클론한 디렉토리로 이동 후, 스크립트 파일을 만들어주고 git 을 커밋해주는 스크립트를 작성해줍시다.

nano commit.sh
#!/bin/bash
cd **/input/your/dir**
git add .
git commit -m "Automated commit $(date)"
git push origin main

코드를 작성했다면 다음 코드로 커밋이 잘 되는지 확인해주세요

bash commit.sh

커밋이 정상적으로 작동되는것을 확인했다면, crontab -e 의 맨 아래에 다음 코드를 입력하여 commit.sh 를 스케듈링 해줍시다. 2시간에 한번씩 커밋해주겠다는 의미입니다. (시간은 자유롭게 설정하셔도 됩니다)

crontab -e
* */2 * * * **/input/your/dir**/commit_profile.sh

Untitled

ctrl + xyenter 를 순로 입력하여 저장하고 crontab -e 에서 나옵시다

3. README_origin 작성

다음은 유저가 직접 작성한 코드를 보관하는 README_origin.md 파일을 생성할것입니다. README.md 냅두고 이게 뭐하는짓인가 싶으시겠지만, 랜덤으로 이미지를 불러올때마다 본문내용을 전부 삭제하고 새로 파일을 작성하기 때문에, 유저가 따로 마크업언어로 수정한 기본 데이터를 따로 만들어서 README를 새롭게 작성할때마다 유저가 작성한 README_origin.md 를 불러와 유저가 작성한 데이터를 보호할겁니다.

README_origin.md 를 따로 생성해줍시다.

nano README_origin.md

README_origin.md 내부엔 자신의 기존 README.md 를 그대로 복사해주면 됩니다.

제 README_origin.md 는 이렇게 되어있습니다.

제 README_origin.md 는 이렇게 되어있습니다.

마찬가지로 ctrl + xyenter 를 순로 입력하여 저장하고 나옵시다.

4. While문을 활용한 스케듈링

저번엔 특정 스크립트를 crontab -e 으로 스케듈링하여 실행했다면, 오늘은 그 방법보단 덜 효율적인 while 문을 활용하여 특정 주기마다 한번씩 스크립트를 실행시킬겁니다.

이미지를 불러오는 부분은 웹사이트의 리스트를 랜덤으로 불러오는 코드인데, 네.. 하드코딩입니다. 다음에 웹사이트에서 호출을해서 받아오는 코드로 업그레이드 할 예정입니다.

코드를 짜기 위해 스크립트를 생성해줍니다

nano randomImgWhileVer.sh

그리고 바로 다음 코드를 입력해줍시다

#!/bin/bash 
source /home/**yourname**/.bashrc 
cd /home/**yourname**/**yourdir**/**yourdir**/ 

while true; do
    # copy origin README 
    cat ./README_origin.md > ./README.md

    # Generate random value and add to URL
    echo "<table>" > ./table.html
    for i in {1..3}; do
        echo "<tr>" >> ./table.html
        for j in {1..3}; do
            rand_num=$(( $RANDOM % 2001 + 415500 ))
            echo "<td><img src='<https://www.random-art.org/img/large/$rand_num.jpg>'></td>" >> ./table.html
        done
        echo "</tr>" >> ./table.html
    done
    echo "</table>" >> ./table.html

    # Paste file info on README.md
    echo " $(echo -e "<br/>") $(cat table.html)" >> ./README.md

    sleep 7200 # 2시간 대기
done

백그라운드에서 코드가 돌아야하기 때문에, 커맨드 마지막에 & 를 추가해줘야 백그라운드로 구동되면서 다른 코드도 입력할 수 있습니다.

bash randomImgWhileVer.sh &

프로세스가 실행중인것을 확인하는 방법은 다음과 같습니다.

둘 다 프로세스를 확인하는 커맨드입니다.

ps -ef | grep bash

# 혹은

ps aux | grep randomImgWhileVer.sh

Untitled

다음과 같이 생성한 스크립트 코드가 bash 상태로 프로세스가 실행되어있을경우, while문은 계속 작동하며 README.md 수정할것입니다.

이제 while문으로 설정한 시간에 따라 이미지를 새롭게 로드하고, crontab -e 에서 스케듈링한 commit에 따라 일정주기마다 이미지가 변할것입니다.

Untitled

http://www.lomando.com/pimg/bettyeye.gif