리눅스 - 시간별 쉘 스크립트 짜기.. 도와주세욤..

   조회 4493   추천 0    

 안녕하세요. 

거두절미하고 본론만 말씀드릴게요.

리눅스 쉘 스크립트를 한번도 짜본적이 없는데 혼자 이것저것 찾다보니 시간도 오래 걸리고 시행착오가 좀 있어서요.

※. 참고. crontab에서 이미 시간, 요일별 특정 유저로 특정 명령어 수행하는 작업 설정하여 테스트까지 완료했습니다.

허나, 최종 목적은 스크립트 하나에 이 모든 내용이 다 들어가고, crontab에서는 딱 한줄로 해당 쉘만 실행시켜주고 싶습니다.


조건

1. test 라는 계정을 사용해야 한다.


2. 월~토 자정 0시에는 original이라는 파일을 incr 이라는 파일 내용으로 덮어씌운다. (incr >> original)

3. 월~토 자정 0시 5분에는 test 라는 계정으로 XXX 명령어를 실행하며, incr.log 파일에 로그를 추가한다. 


4. 일요일 자정 0시에는 original이라는 파일을 full 이라는 파일 내용으로 덮어씌운다. (full >> original)

5. 일요일 자정 0시 5분에는 test 라는 계정으로 XXX 명령어를 실행하며, full.log 파일에 로그를 추가한다.


아직 스크립트 구문에 대해 잘 몰라서 동종업계 고수님들께 여쭙습니다.

비록 많이 부족할지라도 너그러운 마음으로 도와주시면 감사하겠습니다. (좀 더 성장하도록 저도 노력할게용 ㅎ)

짧은글 일수록 신중하게.
무아 2021-07
https://mentha2.tistory.com/87
링크 내용을 참고해보세요.
주기적인 작업 및 user 지정 작업이 설명되어 있네요.
     
가상화린이 2021-07
아 참고로 ㅎㅎ
crontab에서는 잘 활용하고 있습니다.
도움 많이 받았어요. (무아님도 답변 넘 감사합니다 ^^)

따로 스크립트를 짜고
crontab에는 스크립트 실행명령어만 날려볼려고 합니다.ㅠㅠ
          
무아 2021-07
쉘 스크립트는 그냥 텍스트 에디터로 짜면 되고
첫 줄에 어떤 쉘을 쓸건지 지정하고 ( 예. #!/bin/bash )
두번째 줄 부터 명령을 넣으면 됩니다.
파일 내용을 덮어 쓰는 거는 그냥 cp 명령어를 써서 파일을 카피하면 될 거 같고
명령실행 내용을 로그에 추가하려면
명령 >> inc.log
만들어 주고
마지막으로 해당 쉘스크립트 파일이 실행 가능하도록 chmod 명령을 사용하여 실행 파일이라고 지정해주면 됩니다.
각 명령이나 파일위치 등은 경로 잘 확인하시고..
트니아빠 2021-07
0시 5분은 생각보다 맞추기가 어려우니 0시0분에 하는 작업이 종료되고 sleep 300으로 5분을 기다리면 되지 않을까요?

date +%a로 하면 요일이 출력되니 이걸 기반으로 조건문 설정해서 프로그램이 변경되도록 하면 될 것 같습니다.
     
무아 2021-07
dateno1 2021-07
crontab에 직접 뭔가 넣을려고하면 피로해요

그냥 스크립트로 다 짜고, 그거 실행하게만 해주세요
     
가상화린이 2021-07
네 그래서 스크립트 짜는 걸 물어본겁니다 ^^
crontab에는 쉘만 실행하게끔 1줄만 넣고요.

제가 하는 생각과 님이 하는 생각이 같은것같은데?
          
dateno1 2021-07
1. 명령 실행을 제외하면 딱히 특정 계정으로 수행할 필요는 없다고 봅니다

어차피 파일을 생성해버리면 내용물 수정해도 소유권이 바뀌지 않고, 로그에 추가하거나 하는건 권한만 있으면 아무 계정이나 다 똑같으니까요

2. 별로 어려울것 없이 echo로 > 해서 파일 이름 지정하면 끝 (아니면 미리 만들어둔 파일로 덮어쓰기 해도 됩니다)

3. runas같은걸 쓰세요 (로그 실행은 자체 로그 지정 기능이 있다면 로그파일 경로 지정하면 추가되는 경우가 대부분이고, 혹시 덮어쓰기로 작동한다면 임시 경로에 저장후 명령 종료시 파이프라인으로 던져서 추가해야할 파일 끝에 들어가게 하세요)

4. 파이프라인보다는 그냥 cp -f를 추천합니다 (이후 권한등 안 맞으면 수정)

5. 3이랑 동일

그리고 crontab 수동으로 짜면 귀찮으니까 구글링하면 웹으로 쉽게 짜게해주는 페이지 있으니 거기서 짠다음 내용물 그대로 붙이세요

여전히 허접하지만, 20년쯤 리눅스 쓰고 있으니 대충 어떻게든 때울 수 있을정도는 되더군요
성기사 2021-07
굳이 어렵게 가시려고 하는군요. 위에 선배님들이 얘기하신대로 crontab에 넣으시는 것이 좋을 것 같습니다.
     
가상화린이 2021-07
스크립트 짜는게 어려운거고
크론탭에 시간별로 다 등록하는게 쉬운건가요?

?????

전 스크립트를 짜고
크론탭에는 쉘 실행 명령어 한줄만 넣고싶어서요.
          
트니아빠 2021-07
이런 뜻이 아닐까 싶습니다.

구현 하고자 하는 기능을 Q&A를 이용해야 하는 실력에서는 crontab에 일일이 등록하는게 편합니다.

스크립트 요령이 생기면 스크립트 하나만 등록해도 가능하죠.
구현하고자 하는 기능에 요일이 포함되어 있는데 LOCALE을 고려하거나 LOCALE을 고려하지 않도록 변경해서 짜거나 해야하는 복잡함이 있죠.
          
extra 2021-07
직접 스크립트를 짜서 고생하는 것보단 쉽죠.
애초에 크론탭에서 요일마다 수행할 수 있도록 지원하는데 굳이 스크립트에서 요일 파싱하는것보단 쉽죠.
특히 직접개발할 수준이 안되고 질문을 올리시는걸 고려하면 충분한 지식이 없으면 굳이 무리해서 그걸 할 필욘 없습니다.
무야님이 알려주신 링크 참고만 하더라도 꽤 큰 도움이 될 것 같네요.
크론탭을 굳이 한줄로 할려는 의도는 모르겠습니다만 그렇게 한다고 해서 굳이 장점은 없어서요.
크론탭을 편집하는 과정에서는 여러 줄이여서 보기 불편하다라고 생각할 수 있지만, 역으로 유지보수관점에서는 이게 언제 언제 수행되는지 이해되기 편합니다.
예를 들어 서술한대로 0시에 수행후 0시 5분에 수행하기 위해
startTime=$(date +%s);

#work
endTime=$(date +%s);
 
totalTime=$(($endTime-$startTime));
sleepTime= 300 - $(totalTime);
sleep $sleepTime;
이런 식으로 처리해주어야 하는데 유지보수 관점에선 좋은 코드는 아닙니다.(애초에 정확하게 5분 대기는 힘들구요. 1초 이내의 오차는 감안하셔야 할 수도 있습니다. 애초에 그게 중요하진 않을 것 같지만요.)
그리고 프로세스가 그때까지 수행중이므로 리소스 해제가 안되므로 좋은 코드는 아닙니다.
늪에가다 2021-07
스크립트 작성하는데 정답이 어디 있겠습니까. 다만 효율적인가 하는 것에는 의문이 있습니다.
crontatab에 1개의 통합 script를 실행했을때, 해당 script는 마지막 명령어 까지 지속적으로 수행되고 있어야 합니다.
(crontab 등록시 분단위 설정 가능하긴 합니다)

예시로 5분을 적으셨는데 상황에 따라 10시간의 간격이 있다면 그만큼을 script 가 돌고 있는겁니다.
서버 리소스도 점유하고... 요일별 시간별 조건문 사용도 복잡?하고.

구현이 필요하시면,
shell script if, 또는 shell script case 로 검색하시면 되겠습니다.
GodokNam 2021-07
#!/bin/sh

IS_SUNDAY=`date +%u`
IS_HOUR_0=`date +%H`
IS_MIN_5=`date +%M`

if [ "$IS_SUNDAY" = "7" ]
then
        echo "IS_SUNDAY : $IS_SUNDAY"
        echo "Today is Sunday"
        # TODO
        if [ "$IS_HOUR_0" = "13" -a "$IS_MIN_5" = "05" ];
        then
                echo "IS_HOUR_0 : $IS_HOUR_0, IS_MIN_5 : $IS_MIN_5"
                echo "--------------"
                # TODO
        else
                echo "IS_HOUR_0 : $IS_HOUR_0, IS_MIN_5 : $IS_MIN_5"
        fi
else
        echo "IS_SUNDAY : $IS_SUNDAY"
        echo "Today is not Sunday"
        if [ "$IS_HOUR_0" = "13" -a "$IS_MIN_5" = "05" ]
        then
                echo "IS_HOUR_0 : $IS_HOUR_0, IS_MIN_5 : $IS_MIN_5"
                echo "==============="
                # TODO
        else
                echo "IS_HOUR_0 : $IS_HOUR_0, IS_MIN_5 : $IS_MIN_5"
        fi
fi


QnA
제목Page 732/5723
2015-12   1758852   백메가
2014-05   5232148   정은준1
2021-07   5427   DellEMC
2021-07   4109   가온누리I강…
2021-07   3182   Xecus
2021-07   2413   Sikieiki
2021-07   2288   뭐든팔아요
2021-07   3706   린킨파크
2021-07   2300   제라드TN
2021-07   2873   류류류
2021-07   3612   VSPress
2021-07   3396   Setila
2021-07   5010   미친감자
2021-07   4494   가상화린이
2021-07   2119   조재형3
2021-07   2843   고양시
2021-07   2428   bangCH
2021-07   2540   NGC
2021-07   4428   가상화린이
2021-07   2475   미친감자
2021-07   5462   레반터스
2021-07   2960   weikath