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

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

git pull 명령을 실행하고 5분마다 출력 메시지를 파일에 기록해 보았습니다.

하지만 이런 오류가 발생했습니다.

(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)에서

"여섯 번째" 필드(줄의 나머지 부분)는 실행할 명령을 지정합니다. 줄의 전체 명령 부분(개행 또는 "%" 문자까지)은 SHELL 변수 /bin/sh 또는 cronfile에 지정된 셸에 의해 실행됩니다. 백슬래시(\)로 이스케이프하지 않는 한 명령의 "%" 문자는 개행 문자로 변경되고 첫 번째 % 이후의 모든 데이터는 표준 입력으로 명령에 전송됩니다.

강하게날짜 형식이 권장되며 %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

관련 정보