답변:
다음 exec
과 같은 유형을 사용할 수 있습니다 .
exec { "upgrade_packages":
command => "apt-get upgrade -q=2",
path => "/usr/local/bin/:/bin/:/usr/bin/",
# path => [ "/usr/local/bin/", "/bin/" ], # alternative syntax
}
솔직히 직접 시도하지는 않았지만 그러한 exec 정의가 포함 된 새 모듈을 작성해야한다고 생각합니다.
apt-get upgrade
명령은 상호 작용이다. 자동으로 실행되도록 -q=2
위와 같이 옵션 을 추가 할 수 있습니다 .
touch
꼭두각시 마스터에있는 파일입니다.
모든 호스트가 데비안 인 경우 무인 업그레이드 패키지를 사용해 볼 수 있습니다.
http://packages.debian.org/sid/unattended-upgrades
여기서는 꼭두각시를 사용하여 데비안 가상 머신을 관리했으며, 꼭두각시로 모든 서버에서 무인 업그레이드 구성을 활성화하고 관리 할 수 있습니다.
최근 우리 팀은 모든 서버에서 명령을 실행하기 위해 mcollective 도구를 테스트하고 있지만 mcollective 루비 기술을 사용해야합니다.
[s] 구토
꼭두각시, 사실 및 mCollective를 추천합니다.
mCollective는 사실을 필터로 사용하여 일련의 호스트 (병렬로)를 통해 명령을 실행할 수있는 매우 유용한 프레임 워크입니다.
로컬 프록시 / 캐시를 추가하면 서버 관리가 잘 설정됩니다.
여러 서버에서 단일 명령을 실행하도록 만들어진 도구를 사용하십시오. 그리고 그것은 터미네이터 또는 ClusterSSH로 열린 kazillion 터미널을 갖는 것이 아니라 작업에 적합한 도구를 실행하는 관리 서버에 대한 단일 터미널을 갖는 것을 의미합니다.
이 맥락에서 func, Salt 또는 mCollective를 추천합니다. 이미 Puppet을 가지고 있다면 mCollective로 이동하십시오 (Puppet에 잘 통합됨). 그렇지 않고 컴퓨터에 오래된 Python이 있으면 func을 즐길 수 있습니다. 새로운 파이썬이라면, Salt를 사용해보십시오. 이러한 모든 도구는 명령 행에 지정된 명령을 비동기식으로 실행합니다. 이는 순차 ssh 루프보다 훨씬 재미 있으며 심지어 종료 된 터미네이터 창에서 동일한 서버에 대해 동일한 적성 명령을 수행하는 것입니다.
당신은 확실히 것이다 사랑 소금 .
그래서 좋은 해결책에 기여하는 많은 것들이 있다고 생각합니다.
대역폭 : 기본적으로 대역폭 을 절약 할 수있는 두 가지 대안이 있습니다.
관리 : PDSH , PSSH , GNU Parallel 과 같은 병렬 쉘을 구성하고 이전에 예제 머신에서 명령을 테스트 한 경우 모든 클라이언트에서 명령을 발행합니다. 그런 다음 다른 모든 것에서는 실패 할 가능성이별로 없습니다. 또는 모든 클라이언트에서 크론 작업을 고려할 수 있지만 자동으로 실패 할 수 있으므로 첫 번째 솔루션을 선호합니다.
업그레이드 동시성에 대해 염려되는 경우 다음을 사용하여 명령을 예약 할 수 있습니다. at
로깅 : 병렬 쉘과 마찬가지로 출력을 리디렉션 할 수 있으므로 stderr과 stdout을 결합하여 로그 파일에 씁니다.
내 자신의 병렬 ssh 래퍼 : classh 는 다양한 병렬 및 클러스터 ssh 도구의 대안입니다.
당신은 그것을 좋아하거나 싫어할 수 있습니다. 내가 여기에 언급 한 이유는 세 가지뿐입니다.
subprocess.communicate()
메소드 의 제한 사항과 관련된 유일한 제한 사항 -예를 들어 약 64K의 stdout과 최대 64K의 stderr 만 캡처 할 수 있습니다. 또한 stdin에서 읽으려고 시도하는 원격 프로세스는 단순히 정지됩니다 로컬 ssh subporcess가 classh 의 시간 초과 처리에 의해 자동으로 종료 될 때까지 )classh.py 를 모듈 로 사용하기 위해 파이썬에서 커스텀 스크립트를 작성하는 것은 매우 간단 합니다. 따라서 다음과 같은 것을 작성하는 것이 매우 쉽습니다.
!#/bin/env python
import classh
job = classh.SSHJobMan(cmd, targets)
job.start()
while not job.done():
completed = job.poll()
for i in completed:
# do something with the classh.JobRecord object referenced by i
# done
# You can optionally do post-processing on the dictionary of JobRecords here
# keyed off the target strings (hostnames)
</code></pre>
그것이 전부입니다. 예를 들어, 내포 된 완료 루프에서 특정 종료 상태를 리턴 한 특정 목록을 수집하거나 특정 오류 메시지를 스캔하고 해당 작업을 처리하기위한 후속 작업을 설정할 수 있습니다. 작업은 각각 완료 될 때까지 언제든지 100 개의 작업을 동시에 실행하므로 수백 개의 호스트에 대한 간단한 명령은 보통 몇 초 안에 완료되며 하나의 긴 명령 문자열에 매우 복잡한 쉘 스크립트가 있습니다. 예를 들어, 50 줄 정도는 ... 내 환경에서 시간당 약 10K 개의 호스트를 10 분 안에 몇 천 개가 넘는 호스트로 완료 할 수 있습니다.
따라서 이것은 꼭두각시 구성을 구현하고 테스트를 잘 수행 할 때까지 임시 측정으로 사용할 수있는 것일 수 있습니다. 또한 호스트에서 표준을 벗어나는 호스트를 거의 임시로 조사하지 않아도됩니다. 다양한 작은 방법.
exec를 사용하는 대답은 매우 유용합니다.
그러나 apt-get 매뉴얼에 따르면 -q = 2를 이런 식으로 사용하는 것은 좋지 않습니다 (문제없이 몇 년 동안 사용했지만)
-q, --quiet
Quiet; produces output suitable for logging, omitting progress indicators. More q's will produce more quiet up to a maximum of 2. You can also use -q=# to set the
quiet level, overriding the configuration file. Note that quiet level 2 implies -y, you should never use -qq without a no-action modifier such as -d, --print-uris or
-s as APT may decided to do something you did not expect. Configuration Item: quiet.
나는 몇 년 동안 스크립트를 사용하여 apt-get을 다음과 같이 실행했습니다.
ssh example.org "apt-get update && apt-get -y upgrade && apt-get -y dist-upgrade && apt-get clean"
꼭두각시 및 사람들이 확실히 언급 한 다른 도구와 같은 것들이 효과가있을 수 있지만 기본적으로 인간이 입력 한 몇 가지 명령을 모방하는 것은 과잉 것 같습니다. 특정 작업에 가장 간단한 도구를 사용한다고 생각합니다.이 경우 bash 스크립트는 기능을 잃지 않고 얻는 것만 큼 간단합니다.
수년 동안 apt-dater를 사용하여 패키지를 행복하게 업그레이드하고 설치했습니다 . 원격 패키지 관리를위한 가볍고 효과적인 도구입니다. 그것은 사용 screen
, sudo
하고 ssh
.
패키지 관리의 경우 apt-dater 가 구성 관리 도구보다 쉬운 솔루션 일 수 있습니다.
apt-dater 는 데비안 및 CentOS와 같은 다양한 GNU / Linux 버전에서 중앙 집중식 패키지 관리에 편리합니다.
webmin을 사용하고 webmin 클러스터 기능을 사용하면 모든 시스템을 하나의 webmin 콘솔에 추가하고 모든 명령을 발행하거나 한 곳에서 모든 시스템을 제어 할 수 있습니다.
또는
클러스터 ssh 사용
또는
PSSH
모든 호스트가 데비안 (또는 파생 제품)을 실행중인 경우 다른 해결책은 cron-apt 패키지 를 사용하는 것 입니다. 그러나 설명서에 제안 된대로 약간의주의를 기울여야합니다.
현재 수십 대의 서버에서 cron-apt를 사용하여 모든 보안 업데이트를 자동 및 무인으로 수행하고 있습니다. 원치 않는 업그레이드를 피하려면 데비안 안정적인 배포를 실행하는 서버에서만 cron-apt를 사용하고 적절한 소스를 구성해야하므로 별칭 (안정적)이 아닌 배포 이름 wheezy를 사용하십시오 .
내가 사용하는 특정 cron-apt 구성은 하나의 작업 파일에 요약되어 있습니다. /etc/cron-apt/action.d/5-install
dist-upgrade -y -o APT::Get::Show-Upgraded=true -o Dir::Etc::SourceList=/etc/apt/sources.list.d/security.list -o Dir::Etc::SourceParts="/dev/null"
다른 업그레이드는 업그레이드 중 수동 개입이 필요할 수 있으므로 화면 또는 가장 적절한 것을 사용하여 수동으로 수행됩니다.