cronjob 명령을 통해 로그 파일에 타임스탬프 추가

cronjob 명령을 통해 로그 파일에 타임스탬프 추가

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

관련 정보