cronjob은 자동 apt 메시지를 출력하지 않습니다.

cronjob은 자동 apt 메시지를 출력하지 않습니다.

저는 Linux를 처음 사용하고 있으며 Raspberry Pi의 업데이트/업그레이드 스크립트를 자동화하려고 합니다. 이제 1분마다 실행되도록 설정되어 수행 내용을 기록하는지 확인할 수 있습니다. 나중에 X번마다 실행되도록 하겠습니다. 하지만 아무것도 기록하지 않으며 out.log 파일도 생성하지 않습니다.

내가 취한 단계:

crontab -e
#I used the following line
01 * * * * root apt-get update -y && apt-get upgrade -y > /home/cronbin/out.log

그런 다음 저장합니다.

CTRL + X
Y
ENTER

무인 업그레이드와 이 기사에 대해 읽었습니다(apt-get 업그레이드는 crontab 작업을 통해 설치 및 업그레이드되지 않습니다.)도 흥미로웠지만 Linux를 배우거나 사용하려고 노력하고 있으므로 내가 뭘 잘못하고 있는지, 어떻게 작동하게 만드는지 알아내기 위해 이 질문을 하기로 결정했습니다.

답변1

apt일반적 으로 루트 액세스 가 필요하므로 root crontab대신 user crontabRPi에 두어야 합니다 .sudouser crontabPI, 그러나 이는 다른 많은 배포판에서는 작동하지 않을 수 있습니다. 이는 좋은 습관이 아닙니다.

대신 다음을 사용하세요.

sudo crontab -e 

이것은 편집을 위해 열리고 root crontab다음과 같이 입력할 수 있습니다. 이 명령은 매일 오후 12시에 실행되고 apt-get update모든 apt-get upgrade결과를 파일에 기록합니다 /home/pi/upgrade_results.log.

* 12 * * * apt-get update && sudo apt-get -y upgrade >> /home/pi/upgrade_results.log 2>&1
  • man apt-get시스템에 대한 최신 정보와 이 명령 사용에 대한 모든 중요한 세부 정보를 다시 확인하십시오 .

  • 일반적으로 사용자에게 메시지를 표시하지 않으므로 -y옵션이 필요하지 않습니다 .update

  • >>리디렉션추가가장 최근 실행 결과만 원하면 로그 파일로 출력하십시오.추가의다음으로 리디렉션씌우다리디렉션:>

  • 리디렉션은 2>&1일반 stdout( 1) 출력과 모든 stderr( 2) 오류 메시지를 결합합니다. 이는 대화형 셸의 명령줄에서 이러한 명령을 실행한 경우 터미널에서 얻을 수 있는 출력과 동일합니다.

  • 보다크론탭 마스터일정을 정리하는 데 도움을 주세요.

이 작업을 테스트할 때 cron1분 간격으로 실행하면 안 됩니다.허용되지 않음두 명령을 모두 실행하여 완료될 때까지 충분한 시간을 허용합니다. IOW, 당신은 이 명령을 실행하고 있습니다"서로 위에"잠재적으로 유해한 영향을 미칩니다. 테스트 목적으로 이 명령을 반복적으로 실행해야 한다고 생각되면 먼저 명령을 "수동으로" 실행한 다음 작업에서 또는 옵션을 사용해야 합니다 -s. 작업이 실행 중인 것으로 확인되면 명령에서 또는 옵션을 제거해야 합니다.--dry-runcroncron-s--dry-runapt-get

upgrade사용하면 상당한 양의 출력을 생성할 수 있습니다.추가의리디렉션 >>- 시간이 지남에 따라 로그 파일이 매우 커질 수 있습니다. 정기적으로 확인하여 파일을 직접 정리하거나 삭제해야 합니다. 로그 크기를 제한하려는 경우자동으로, 해당 logrotate명령 또는 cron로그 파일을 임시 위치로 파이프하는 다른 작업을 고려하고tail-ctmp문서.

답변2

crontab -e사용자로서 서브셸에서 업그레이드를 실행할 수 있습니다 root! 중요한

이와 같이:

1 * * * * (/usr/bin/apt-get update;/usr/bin/apt-get dist-upgrade -y) >> /home/cronbin/out.log 2>&1

2>&1모든 오류를 출력으로 전달합니다.

/var/log/cron.log/home/cronbin/out.log에 어떤 outout이 추가될지( 로그를 넣는 것이 더 나을 것 같지만 )


또한 시간을 crontab -e지정하지 않은 후에도 다음이 수행됩니다.user

01 * * * * root
           ^^^^

/etc/cron.*/폴더 내부의 스크립트에서만 사용자를 지정합니다.

답변3

명령을 사용하여 레코드를 crontab -e편집 하려면 다음과 같은 줄을 사용해야 합니다.cron

1 * * * * apt-get update -y && apt-get upgrade -y > /home/cronbin/out.log

개인 로깅을 사용할 때 cron사용자 이름(루트) PS를 추가해서는 안 되며, 매번 다시 생성하는 대신 로그 파일에 출력을 추가하는 것이 좋습니다. 이것을 교체하십시오:

> /home/cronbin/out.log

이것으로:

>> /home/cronbin/out.log

또한 업데이트를 실행하는 데 시간이 더 오래 걸릴 수 있으므로 1분마다 실행하는 것은 현명하지 않습니다. 두 개 이상의 apt프로세스가 있습니다. 합리적인 접근 방식은 24시간마다 업데이트/업그레이드를 실행하는 것입니다.

관련 정보