저는 Debian, Raspian, Mint를 실행하는 여러 컴퓨터를 관리하고 있습니다. 일부 컴퓨터에서는 자동 업데이트 및 업그레이드를 원합니다. 이 작업을 수행하고 업데이트 성공 여부를 기록하는 스크립트 초안을 작성했습니다.
#!/bin/bash
captains_log=/home/jason/mission_control/captains.log
apt-get update;
if [ $? == 0 ]; then
apt-get upgrade -y;
if [ $? == 1 ]; then
echo `date`": Daily update failed" >> $captains_log
else
echo `date`": Daily update successful" >> $captains_log
fi
else
echo `date`": Daily update failed" >> $captains_log
fi
@daily
루트에서 실행 되도록 스크립트를 설정했습니다 crontab
. 명령을 수동으로 실행하면 필요에 따라 실행됩니다. 스크립트를 실행할 때 cron
로그에는 성공했지만 소프트웨어는 업데이트되지 않았습니다.
누구든지 내가 어디로 잘못 가고 있는지 말해 줄 수 있습니까?
답변1
권장되는 방법은 명령을 사용하는 것입니다 unattended-upgrades
. 설정은 간단합니다.
apt-get install unattended-upgrades
dpkg-reconfigure unattended-upgrades
이것이 cron 스크립트에서 원하는 결과를 얻는 데 필요한 전부입니다. 바퀴를 재발명할 필요가 없습니다.
0이 아닌 반환 코드는 스크립트 및 해당 성공 보고에 관한 한 실패로 간주됩니다. 스크립트는 1 이외의 모든 것을 성공으로 처리합니다. 종료 코드를 수동으로 확인할 필요가 없습니다 if
.
if apt-get upgrade -y; then
echo "$(date): Daily update successful" >> $captains_log
else
echo "$(date): Daily update failed" >> $captains_log
fi
셸에서 "명령을 찾을 수 없음"이 발생하면 종료 코드 127이 반환됩니다.
답변2
apt-get
crons shell-searchpath에 있습니까 ?
cron 작업에서는 항상 외부 명령의 전체 경로를 사용하는 것이 좋습니다.