![cronjob 명령을 통해 로그 파일에 타임스탬프 추가](https://rvso.com/image/36009/cronjob%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%ED%86%B5%ED%95%B4%20%EB%A1%9C%EA%B7%B8%20%ED%8C%8C%EC%9D%BC%EC%97%90%20%ED%83%80%EC%9E%84%EC%8A%A4%ED%83%AC%ED%94%84%20%EC%B6%94%EA%B0%80.png)
5분마다 파일에 출력 메시지를 기록하면서 git pull 명령을 실행하려고 합니다.
하지만 이런 오류가 발생했습니다.
(root) CMD (cd /var/www/sites/ && git pull origin master | sed -e "s/^/$(date +\")
(CRON) error (grandchild #1111 failed with exit status 2)
내 cronjob 명령은 다음과 같습니다.
*/5 * * * * cd /var/www/site/ && git pull origin master | sed -e "s/^/$(date +\"%d-%m-%y\ %T\"), /" >> /var/log/crond/site.log
어떻게 고칠 수 있나요?
답변1
일부 시스템의 경우 a는 %
crontab에서 특별합니다. 내 시스템의 crontab(5)에서
"여섯 번째" 필드(줄의 나머지 부분)는 실행할 명령을 지정합니다. 줄 바꿈 또는 "%" 문자까지 줄의 전체 명령 부분은 /bin/sh 또는 cronfile의 SHELL 변수에 지정된 셸에 의해 실행됩니다. 백슬래시(\)로 이스케이프하지 않는 한 명령의 "%" 문자는 개행 문자로 변경되고 첫 번째 % 이후의 모든 데이터는 표준 입력으로 명령에 전송됩니다.
나강하게날짜 형식을 사용하는 %Y-%m-%d
것이 좋습니다.표준, 어휘 및 연대순으로 동일하게 정렬됩니다. 일부 strftime 구현에는 이에 대한 약어가 있습니다.%F
시스템에ts
명령
cd /dir && git pull origin master 2>&1 | ts "\%F \%T" >> /var/log/crond/site.log
"실시간" 타임스탬프를 얻으려면 다음 명령을 버퍼링 해제해야 할 수도 있습니다. (정말 보기 흉해지기 시작함)
cd /dir && stdbuf -oL sh -c 'git pull origin master 2>&1' | ts "\%F \%T" >> /var/log/crond/site.log