cronjob이 실행될 때 특정 메시지를 로그 파일에 기록하려면 어떻게 해야 합니까?

cronjob이 실행될 때 특정 메시지를 로그 파일에 기록하려면 어떻게 해야 합니까?

cronjob이 실행되면 로그 파일에 "Ran Cronjob XY" 메시지를 쓰려고 합니다.

시도:

/opt/cpanel/ea-php73/root/usr/bin/php /home/company/example.de/bin/magento list 2>&1 | grep -v "Ran Cronjob XY" >> /home/company/example.de/var/log/test.cron.log

그러나 이는 실패하고 명령의 출력을 기록합니다 /opt/cpanel/ea-php73/root/usr/bin/php /home/company/example.de/bin/magento list.Cronjob XY를 실행했습니다.

보너스:

명령이 성공적으로 실행되면 "성공적으로 실행"을 인쇄하고 그렇지 않으면 "실패"를 인쇄하는 방법을 보여줍니다.

답변1

if some_command >/dev/null 2>&1; then
    echo ran successfully
else
    echo failed
fi >>logfile

위의 코드는 명령을 실행하고 출력을 삭제하며 명령이 성공적으로 완료되면 파일에 some_command텍스트를 추가합니다 . 명령이 실패하면 텍스트 가 .ran successfullylogfilefailedlogfile

귀하의 경우에는 단순화를 위해(명령에 긴 경로 이름이 있으므로) 이를 자체 래퍼 스크립트에 넣고 실행합니다.저것크론 작업이 포함된 스크립트.

스크립트는 다음과 같습니다

#!/bin/sh

PATH=/opt/cpanel/ea-php73/root/usr/bin:$PATH

logfile=/home/company/example.de/var/log/test.cron.log

if php /home/company/example.de/bin/magento list >/dev/null 2>&1
then
    echo ran successfully
else
    echo failed
fi >>"$logfile"

절대 경로 없이 실행할 PATH수 있도록 스크립트를 수정했습니다 .php

그런 다음 스크립트가 예약됩니다.

* * * * * /path/to/thescript.sh

... * * * * *실제 일정으로 대체되어야 합니다.

crontab 항목에서 직접 사용하기 위해 "한 줄짜리"로 바꾸려면 다음을 수행하십시오.

* * * * * if /opt/cpanel/ea-php73/root/usr/bin/php /home/company/example.de/bin/magento list >/dev/null 2>&1; then echo ran successfully; else echo failed; fi >>/home/company/example.de/var/log/test.cron.log

... * * * * *실제 일정으로 대체되어야 합니다.

답변2

첫 번째 명령이 성공적으로 실행되면 로그 파일에 메시지를 표시하려는 것 같습니다. 이 경우 &&파이프 대신 이중 & 기호를 사용할 수 있습니다 |. /opt/cpanel/ea-php73/root/usr/bin/php /home/company/example.de/bin/magento list 2>&1 && echo "Ran Cronjob XY" >> /home/company/example.de/var/log/test.cron.log

관련 정보