저는 YouTube 동영상과 온라인 강좌를 팔로우하고 Linux 명령을 배우고 기술을 향상하며 더 나아지려고 노력하고 있습니다. 현재 일정을 이해하려고 노력 중입니다.
내 Raspberry Pi는 헤드리스 Raspbian에서 자체 클라우드를 실행합니다. 일주일에 한 번 owncloud를 유지 관리 모드로 설정하고, apt-get 업데이트, apt-get 업그레이드, owncloud를 유지 관리 모드에서 해제하도록 예약하고 싶습니다. Owncloud(php) 명령은 사용자 www-data에서 실행되어야 하며, apt-get은 루트로 실행되어야 합니다. 지금까지 나는 다음을 시도했습니다.
sudo -u www-data crontab -e
행 추가0 7 * * 1 php /var/www/owncloud/occ maintenance:mode --on
그 다음에
sudo crontab -e
행 추가1 7 * * 1 apt-get update && apt-get upgrade -y
하지만 여기서 나는 막혔습니다. apt-get Upgrade -y가 종료 상태 0을 반환한 후 유지 관리 모드에서 owncloud를 종료하도록 시스템에 어떻게 지시합니까? 루트의 crontab 항목을 다음으로 설정하는 것을 고려했습니다.
1 7 * * 1 apt-get update && apt-get upgrade && php /var/www/owncloud/occ maintenance:mode --off
그러나 Maintenance:mode --off는 www-data 사용자가 실행하지 않기 때문에 실패합니다. 몇 분 후에 www-data로 실행되도록 마지막 명령을 예약할 수 있지만 apt-get Upgrade -y가 종료 상태 0을 제공할 때 실행하는 것이 좋습니다. 이를 수행할 수 있는 방법이 있습니까?
답변1
su
친구들과 함께 구조하러 오세요! su
, sudo
, 및 super
모두 여기서 사용할 수 있습니다. su
전통적이고 sudo
가장 단순하며 super
사용자가 이러한 작업 중 일부를 수행할 수 있도록 하려는 경우 이점이 있습니다.
apt-get upgrade
종료 상태 테스트를 구체적으로 언급했으므로 1 7 * * 1 apt-get update && apt-get upgrade && sudo -u www-data php /var/www/owncloud/occ maintenance:mode --off
.
이제 이것은 약간 길기 때문에 thrig의 제안을 따르고 이를 스크립트에 넣는 것이 장점이 있지만 그의 예에는 두 가지 단점이 있습니다. 반환 값을 확인하지 않으며 명령의 유지 관리 모드가 다음 명령을 바로 따릅니다. 유지 관리 모드로 들어가는 것과 apt-get을 시작하는 것 사이에 지연이 있는 이유가 있으므로 다음과 같은 것을 더 원할 수 있습니다.
#!/bin/sh
set -e
sudo -u www-data php /var/www/owncloud/occ maintenance:mode --on || sudo -u www-data php /var/www/owncloud/occ maintenance:mode --on
sleep 1m || true
apt-get update || apt-get update
apt-get upgrade -y || apt-get install
sudo -u www-data php /var/www/owncloud/occ maintenance:mode --off || sudo -u www-data php /var/www/owncloud/occ maintenance:mode --off
하지만 당신은 이미 좋은 출발을 하고 있습니다.
답변2
필요한 모든 단계를 순서대로 수행하려면 스크립트가 필요할 수 있습니다.
#!/bin/sh
sudo -u www-data php /var/www/owncloud/occ maintenance:mode --on
apt-get update && apt-get upgrade -y
sudo -u www-data php /var/www/owncloud/occ maintenance:mode --off
그런 다음 루트의 crontab에서 실행하십시오.