

# EC2Rescue로 손상된 Amazon EC2 Linux 인스턴스 문제 해결
<a name="Linux-Server-EC2Rescue"></a>

Linux용 EC2Rescue는 Amazon EC2 Linux 인스턴스에서 실행하여 100개 이상의 **모듈 라이브러리로 일반적인 문제를 진단, 문제 해결 및 수정할 수 있는 사용하기 쉬운 오픈 소스 도구입니다. 모듈은 BASH 또는 Python 스크립트와 필요한 메타데이터를 포함하는 YAML 파일입니다.

Linux용 EC2Rescue 인스턴스의 몇 가지 일반적인 사용 사례는 다음과 같습니다.
+ syslog 및 패키지 관리자 로그 수집
+ 리소스 사용률 데이터 수집
+ 알려진 문제가 있는 커널 파라미터 및 일반적인 OpenSSH 문제 진단 및 해결

**참고**  
`AWSSupport-TroubleshootSSH` AWS Systems Manager Automation 런북은 Linux용 EC2Rescue를 설치한 다음 이 도구를 사용하여 Linux 인스턴스에 대한 SSH 연결을 방해하는 일반적인 문제를 확인하거나 수정하려고 합니다. 자세한 내용은 [AWSSupport-TroubleshootSSH](https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-awssupport-troubleshootssh.html)를 참조하세요.

Windows 인스턴스를 사용하는 경우 [EC2Rescue를 사용하여 손상된 Amazon EC2 Windows 인스턴스 문제 해결](Windows-Server-EC2Rescue.md) 섹션을 참조하세요.

**Topics**
+ [EC2Rescue 설치](ec2rl_install.md)
+ [EC2Rescue 명령 실행](ec2rl_working.md)
+ [EC2Rescue 모듈 개발](ec2rl_moduledev.md)

# Amazon EC2 Linux 인스턴스에 EC2Rescue 설치
<a name="ec2rl_install"></a>

다음 사전 조건을 충족하는 Amazon EC2 Linux 인스턴스에 Linux용 EC2Rescue 도구를 설치할 수 있습니다.

**사전 조건**
+ 지원되는 운영 체제:
  + Amazon Linux 2
  + Amazon Linux 2016.09\$1
  + SUSE Linux Enterprise Server 12\$1
  + RHEL 7\$1
  + Ubuntu 16.04\$1
+ 소프트웨어 요구 사항:
  + Python 2.7.9\$1 또는 3.2\$1

## EC2Rescue 설치
<a name="ec2rl-install"></a>

`AWSSupport-TroubleshootSSH` Runbook은 Linux용 EC2Rescue를 설치한 다음 이 도구를 사용하여 SSH를 통한 Linux 시스템에 대한 원격 연결을 방해하는 일반적인 문제를 확인하거나 수정하려고 합니다. 자세한 내용을 보고 이 자동화를 실행하려면 [지원-TroubleshootSSH](https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-awssupport-troubleshootssh.html)를 참조하세요.

시스템에 필수 Python 버전이 있다면 표준 빌드를 설치할 수 있습니다. 없다면 Python의 최소 사본이 포함된 번들링된 빌드를 설치할 수 있습니다.

**표준 빌드를 설치하려면**

1. 작동하는 Linux 인스턴스에서 [Linux용 EC2Rescue](https://s3.amazonaws.com/ec2rescuelinux/ec2rl.tgz) 도구를 다운로드합니다.

   ```
   curl -O https://s3.amazonaws.com/ec2rescuelinux/ec2rl.tgz
   ```

1. (**선택 사항) Linux용 EC2Rescue 설치 파일의 서명을 확인합니다. 자세한 내용은 [(선택 사항) Linux용 EC2Rescue의 서명 확인](#ec2rl_verify) 섹션을 참조하세요.

1. sha256 해시 파일 다운로드:

   ```
   curl -O https://s3.amazonaws.com/ec2rescuelinux/ec2rl.tgz.sha256
   ```

1. tarball의 무결성 확인:

   ```
   sha256sum -c ec2rl.tgz.sha256
   ```

1. tarball의 압축을 풉니다.

   ```
   tar -xzvf ec2rl.tgz
   ```

1. 도움말 파일을 나열하여 설치를 확인합니다.

   ```
   cd ec2rl-<version_number>
   ./ec2rl help
   ```

**번들링된 빌드를 설치하려면**  
다운로드 링크 및 제한 사항 목록은 GitHub에서 [Linux용 EC2Rescue](https://github.com/awslabs/aws-ec2rescue-linux/blob/master/README.md)를 참조하세요.

## (선택 사항) Linux용 EC2Rescue의 서명 확인
<a name="ec2rl_verify"></a>

다음은 Linux 기반 운영 체제용 Linux용 EC2Rescue 패키지의 유효성을 확인하는 권장 절차입니다.

인터넷에서 애플리케이션을 다운로드할 때 소프트웨어 게시자의 자격 증명을 인증하고 애플리케이션이 게시된 후 변경되거나 손상되지 않았는지 확인하는 것이 좋습니다. 이를 통해 바이러스나 기타 악성 코드가 포함된 애플리케이션 버전을 설치하는 것을 방지할 수 있습니다.

이 섹션의 절차를 수행한 후에 Linux용 EC2Rescue용 소프트웨어가 변경되거나 손상된 것을 발견한 경우 설치 파일을 실행하지 마세요. 대신 Amazon Web Services에 문의하세요.

Linux 기반 운영 체제용 Linux용 EC2Rescue 파일은 보안 디지털 서명을 위한 Pretty Good Privacy 표준의 오픈 소스 구현(OpenPGP)인 GnuPG를 사용하여 서명됩니다. GnuPG(GPG라고도 함)는 디지털 서명을 통해 확인한 후 인증 및 무결성을 제공합니다. AWS는 다운로드된 Linux용 EC2Rescue 패키지를 확인할 수 있도록 퍼블릭 키 및 서명을 게시합니다. PGP 및 GnuPG(GPG)에 대한 자세한 내용은 [https://www.gnupg.org/](https://www.gnupg.org/)를 참조하세요.

첫 번째 단계는 소프트웨어 게시자와 신뢰를 구축하는 것입니다. 소프트웨어 게시자의 퍼블릭 키를 다운로드하고, 퍼블릭 키의 소유자가 정당한 소유자인지 확인한 다음, 퍼블릭 키를 키링에 추가합니다. 키링은 알려진 퍼블릭 키의 모음입니다. 퍼블릭 키의 신뢰성을 설정한 후, 이를 사용하여 애플리케이션의 서명을 확인할 수 있습니다.

**Topics**
+ [퍼블릭 키 인증 및 가져오기](#ec2rl_authenticate)
+ [패키지의 서명 확인](#ec2rl_verify_signature)

### 퍼블릭 키 인증 및 가져오기
<a name="ec2rl_authenticate"></a>

프로세스의 다음 단계는 Linux용 EC2Rescue 퍼블릭 키를 인증하고 이를 신뢰할 수 있는 키로 GPG 인증 키에 추가하는 것입니다.

**Linux용 EC2Rescue 퍼블릭 키를 인증하고 가져오려면**

1. 명령 프롬프트에서 다음 명령을 사용하여 퍼블릭 GPG 빌드 키의 사본을 받습니다.

   ```
   curl -O https://s3.amazonaws.com/ec2rescuelinux/ec2rl.key
   ```

1. `ec2rl.key`를 저장한 디렉터리의 명령 프롬프트에서 다음 명령을 사용하여 Linux용 EC2Rescue 퍼블릭 키를 인증 키로 가져옵니다.

   ```
   gpg2 --import ec2rl.key
   ```

   이 명령은 다음과 같은 결과를 반환합니다.

   ```
   gpg: /home/ec2-user/.gnupg/trustdb.gpg: trustdb created
   gpg: key 2FAE2A1C: public key "ec2autodiag@amazon.com <EC2 Rescue for Linux>" imported
   gpg: Total number processed: 1
   gpg:               imported: 1  (RSA: 1)
   ```
**작은 정보**  
명령을 찾을 수 없다는 오류가 표시되면 `apt-get install gnupg2`(Debian 기반 Linux) 또는 `yum install gnupg2`(Red Hat 기반 Linux)를 사용하여 GnuPG 유틸리티를 설치합니다.

### 패키지의 서명 확인
<a name="ec2rl_verify_signature"></a>

GPG 도구를 설치하고, Linux용 EC2Rescue 퍼블릭 키를 인증 및 가져오고, Linux용 EC2Rescue 퍼블릭 키가 신뢰할 수 있는지 확인하면 Linux용 EC2Rescue 설치 스크립트의 서명을 확인할 준비가 된 것입니다.

**Linux용 EC2Rescue 설치 스크립트 서명을 확인하려면**

1. 명령 프롬프트에서 다음 명령을 실행하여 설치 스크립트용 서명 파일을 다운로드합니다.

   ```
   curl -O https://s3.amazonaws.com/ec2rescuelinux/ec2rl.tgz.sig
   ```

1. `ec2rl.tgz.sig` 및 Linux용 EC2Rescue 설치 파일을 저장한 디렉터리의 명령 프롬프트에서 다음 명령을 실행하여 서명을 확인합니다. 두 파일이 모두 있어야 합니다.

   ```
   gpg2 --verify ./ec2rl.tgz.sig
   ```

   출력은 다음과 같아야 합니다.

   ```
   gpg: Signature made Thu 12 Jul 2018 01:57:51 AM UTC using RSA key ID 6991ED45
   gpg: Good signature from "ec2autodiag@amazon.com <EC2 Rescue for Linux>"
   gpg: WARNING: This key is not certified with a trusted signature!
   gpg:          There is no indication that the signature belongs to the owner.
   Primary key fingerprint: E528 BCC9 0DBF 5AFA 0F6C  C36A F780 4843 2FAE 2A1C
        Subkey fingerprint: 966B 0D27 85E9 AEEC 1146  7A9D 8851 1153 6991 ED45
   ```

   출력에 `Good signature from "ec2autodiag@amazon.com <EC2 Rescue for Linux>"` 문구가 포함된 경우 서명을 확인했고 Linux용 EC2Rescue 설치 스크립트 실행을 계속할 수 있음을 의미합니다.

   출력에 `BAD signature` 문구가 포함된 경우, 절차를 올바르게 수행했는지 확인합니다. 계속해서 이 응답을 받게 되면 Amazon Web Services에 문의하고 이전에 다운로드한 설치 파일을 실행하지 마세요.

다음은 표시될 수 있는 경고에 대한 세부 정보입니다.
+ **WARNING: This key is not certified with a trusted signature\$1 There is no indication that the signature belongs to the owner.**이는 사용자가 Linux용 EC2Rescue에 대한 신뢰할 수 있는 퍼블릭 키를 소유하고 있다는 개인적인 신뢰 수준을 가리킬 뿐입니다. Amazon Web Services 사무실을 방문하여 직접 키를 받는 것이 이상적입니다. 그러나 대부분의 경우 웹 사이트에서 다운로드합니다. 이 경우 웹 사이트는 Amazon Web Services 웹 사이트입니다.
+ **gpg2: no ultimately trusted keys found.** 이는 사용자(또는 사용자가 신뢰하는 다른 사용자)가 특정 키를 "궁극적으로 신뢰"하지 않음을 뜻합니다.

자세한 내용은 [https://www.gnupg.org/](https://www.gnupg.org/)를 참조하세요.

# Amazon EC2 Linux 인스턴스에서 EC2Rescue 명령 실행
<a name="ec2rl_working"></a>

EC2Rescue는 명령줄 도구입니다. Linux 인스턴스에 EC2Rescue를 설치한 후 `./ec2rl help`를 실행하여 도구 사용 방법에 대한 일반적인 도움말을 볼 수 있습니다. `./ec2rl list`를 실행하여 사용 가능한 모듈을 보고, `./ec2rl help module_name`을 실행하여 특정 모듈에 대한 도움말을 볼 수 있습니다.

다음은 이 도구를 사용하여 시작할 때 수행할 수 있는 일반적인 작업입니다.

**Topics**
+ [EC2Rescue 모듈 실행](#ec2rl_running_module)
+ [EC2Rescue 모듈 결과 업로드](#ec2rl_uploading_results)
+ [Amazon EC2 Linux 인스턴스의 백업 생성](#ec2rl_creating_backups)

## EC2Rescue 모듈 실행
<a name="ec2rl_running_module"></a>

**모든 EC2Rescue 모듈을 실행하려면 다음을 수행하세요.**  
추가 파라미터를 지정하지 않고 **./ec2rl run** 명령을 사용합니다. 일부 모듈에는 루트 액세스가 필요합니다. 루트 사용자가 아니라면 명령을 실행할 때 **sudo**를 사용합니다.

```
./ec2rl run
```

**특정 EC2Rescue 모듈을 실행하려면 다음을 수행하세요.**  
**./ec2rl run** 명령을 사용하고 `--only-modules`에 대해 실행할 모듈의 이름을 지정합니다. 일부 모듈은 사용하려면 **인수가 필요합니다.

```
./ec2rl run --only-modules=module_name --arguments
```

예를 들어, **dig** 모듈을 실행하여 `amazon.com` 도메인을 쿼리하려면 다음 명령을 사용합니다.

```
./ec2rl run --only-modules=dig --domain=amazon.com
```

**EC2Rescue 모듈의 결과를 보려면 다음을 수행하세요.**  
모듈을 실행하고 `cat /var/tmp/ec2rl/logfile_location`에서 로그 파일을 봅니다. 예를 들어, **dig** 모듈의 로그 파일은 다음 위치에서 찾을 수 있습니다.

```
cat /var/tmp/ec2rl/timestamp/mod_out/run/dig.log
```

## EC2Rescue 모듈 결과 업로드
<a name="ec2rl_uploading_results"></a>

지원에서 EC2Rescue 모듈에 대한 결과를 요청한 경우 EC2Rescue 도구를 사용하여 로그 파일을 업로드할 수 있습니다. 지원에서 제공하는 위치나 사용자가 소유한 Amazon S3 버킷에 결과를 업로드할 수 있습니다.

**지원에서 제공하는 위치에 결과를 업로드하려면 다음을 수행하세요.**  
**./ec2rl upload** 명령을 사용합니다. `--upload-directory`에 로그 파일의 위치를 지정합니다. `--support-url`에 지원에서 제공하는 URL을 지정합니다.

```
./ec2rl upload --upload-directory=/var/tmp/ec2rl/logfile_location --support-url="url_provided_by_aws_support"
```

**Amazon S3 버킷에 결과를 업로드하려면 다음을 수행하세요.**  
**./ec2rl upload** 명령을 사용합니다. `--upload-directory`에 로그 파일의 위치를 지정합니다. `--presigned-url`에 S3 버킷의 미리 서명된 URL을 지정합니다. Amazon S3에 대해 미리 서명된 URL 생성에 대한 자세한 내용은 [미리 서명된 URL을 사용하여 객체 업로드](https://docs.aws.amazon.com/AmazonS3/latest/userguide/PresignedUrlUploadObject.html)를 참조하세요.

```
./ec2rl upload --upload-directory=/var/tmp/ec2rl/logfile_location --presigned-url="presigned_s3_url"
```

## Amazon EC2 Linux 인스턴스의 백업 생성
<a name="ec2rl_creating_backups"></a>

EC2Rescue를 사용하여 AMI를 생성하거나 연결된 볼륨의 스냅샷을 생성하여 Linux 인스턴스를 백업할 수 있습니다.

**API 생성**  
`./ec2rl run` 명령을 사용하고 --`backup`에 `ami`를 지정합니다.

```
./ec2rl run --backup=ami
```

**연결된 모든 볼륨의 다중 볼륨 스냅샷을 생성하려면 다음을 수행하세요.**  
`./ec2rl run` 명령을 사용하고 --`backup`에 `allvolumes`를 지정합니다.

```
./ec2rl run --backup=allvolumes
```

**연결된 특정 볼륨의 스냅샷을 생성하려면 다음을 수행하세요.**  
`./ec2rl run` 명령을 사용하고 --`backup`에 백업할 볼륨의 ID를 지정합니다.

```
./ec2rl run --backup=vol-01234567890abcdef
```

# Amazon EC2 Linux 인스턴스용 EC2Rescue 모듈 개발
<a name="ec2rl_moduledev"></a>

모듈은 데이터 직렬화 표준인 YAML로 작성됩니다. 모듈의 YAML 파일은 모듈과 모듈의 속성을 나타내는 단일 문서로 구성됩니다.

## 모듈 속성 추가
<a name="ec2rl-adding-modules"></a>

다음 표에는 사용 가능한 모듈 속성이 나열되어 있습니다.


| 속성 | 설명 | 
| --- | --- | 
| 이름 | 모듈의 이름입니다. 이름 길이는 18자보다 작거나 같아야 합니다. | 
| 버전 | 모듈의 버전 번호입니다. | 
| 제목 | 모듈에 대해 간단하게 설명하는 제목입니다. 이 값의 길이는 50자보다 작거나 같아야 합니다. | 
| helptext |  모듈에 대해 확장된 설명입니다. 각 줄의 길이는 75자보다 작거나 같아야 합니다. 모듈이 필수 또는 선택 사항으로 인수를 사용하는 경우 해당 인수를 helptext 값에 포함하세요. 예: <pre>helptext: !!str |<br />  Collect output from ps for system analysis<br />  Consumes --times= for number of times to repeat<br />  Consumes --period= for time period between repetition</pre> | 
| 배치 | 모듈을 실행해야 하는 단계입니다. 지원되는 값: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/ec2rl_moduledev.html)  | 
| language | 모듈 코드가 작성된 언어입니다. 지원되는 값: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/ec2rl_moduledev.html)  Python 코드는 Python 2.7.9\$1 및 Python 3.2\$1와 모두 호환되어야 합니다.   | 
| remediation |  모듈에서 문제 해결을 지원하는지 여부를 나타냅니다. 지원되는 값은 `True` 또는 `False`입니다. 없는 경우에는 모듈의 기본값은 `False`이며, 문제 해결을 지원하지 않는 모듈에 대해 선택 가능한 속성이 됩니다.  | 
| 콘텐츠 | 전체 스크립트 코드입니다. | 
| constraint | 제약 값을 포함하는 객체의 이름입니다. | 
| 도메인 | 모듈을 그룹화하거나 분류하는 방법에 대한 서술자입니다. 포함된 모듈의 집합은 다음 도메인을 사용합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/ec2rl_moduledev.html) | 
| class | 모듈이 수행하는 작업 유형에 대한 서술자입니다. 포함된 모듈의 집합은 다음 클래스를 사용합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/ec2rl_moduledev.html) | 
| distro | 이 모듈이 지원하는 Linux 배포판의 목록입니다. 포함된 모듈의 집합은 다음 배포판을 사용합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/ec2rl_moduledev.html) | 
| 필수 | CLI 옵션에서 모듈이 사용하는 필수 인수입니다. | 
| 선택 사항 | 모듈이 사용할 수 있는 선택적 인수입니다. | 
| software | 모듈에서 사용되는 소프트웨어 실행 파일입니다. 이 속성은 기본적으로 설치되지 않은 소프트웨어를 지정하기 위한 용도입니다. Linux용 EC2Rescue 로직은 모듈을 실행하기 전에 이러한 프로그램의 존재 여부와 실행 가능 여부를 확인합니다. | 
| 패키지 | 실행 파일을 위한 소스 소프트웨어 패키지입니다. 이 속성은 추가 정보를 가져오거나 다운로드하기 위한 URL을 비롯하여 소프트웨어가 포함된 패키지에 대해 확장된 세부 정보를 제공하기 위한 용도입니다. | 
| sudo | 모듈을 실행하는 데 루트 액세스가 필요한지 여부를 나타냅니다. 모듈 스크립트에서 sudo 확인을 구현할 필요가 없습니다. 이 값이 true이면 Linux용 EC2Rescue 로직은 실행 사용자에게 루트 액세스가 있는 경우에만 모듈을 실행합니다. | 
| perfimpact | 모듈이 실행되는 환경에 중요한 성능 영향을 줄 수 있는지 여부를 나타냅니다. 이 값이 true이고 `--perfimpact=true` 인수가 없으면 모듈을 건너뜁니다. | 
| parallelexclusive | 상호 배타성이 필요한 프로그램을 지정합니다. 예를 들어, "bpf"를 지정하는 모든 모듈은 직렬 방식으로 실행됩니다. | 

## 환경 변수 추가
<a name="ec2rl_adding_envvars"></a>

다음 표에는 사용 가능한 환경 변수가 나열되어 있습니다.


| 환경 변수 | 설명 | 
| --- | --- | 
|  `EC2RL_CALLPATH`  | ec2rl.py의 경로입니다. 이 경로는 라이브러리 디렉터리를 찾고, 공급된 Python 모듈을 활용하는 데 사용할 수 있습니다. | 
|  `EC2RL_WORKDIR`  |  진단 도구에 대한 기본 tmp 디렉터리입니다. 기본값: `/var/tmp/ec2rl`. | 
|  `EC2RL_RUNDIR`  |  모든 출력이 저장될 디렉터리입니다. 기본값: `/var/tmp/ec2rl/<date&timestamp>`.  | 
|  `EC2RL_GATHEREDDIR`  |  수집한 모듈 데이터를 배치하기 위한 루트 디렉터리입니다. 기본값:`/var/tmp/ec2rl/<date&timestamp>/mod_out/gathered/`.  | 
|  `EC2RL_NET_DRIVER`  |  인스턴스에서 알파벳 순서 중 첫 번째 비 가상 네트워크 인터페이스에 사용하는 드라이버입니다. 예시: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/ec2rl_moduledev.html)  | 
|  `EC2RL_SUDO`  |  Linux용 EC2Rescue가 루트로 실행되면 true이고, 그렇지 않으면 false입니다.  | 
|  `EC2RL_VIRT_TYPE`  |  인스턴스 메타데이터에 의해 제공된 가상화 유형입니다. 예시: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/ec2rl_moduledev.html)  | 
|  `EC2RL_INTERFACES`  |  시스템에서 인터페이스의 열거 목록입니다. 이 값은 `eth0`, `eth1` 등 이름을 포함하는 문자열입니다. 이 환경 변수는 `functions.bash`를 통해 생성되며 해당 변수를 제공한 모듈에 대해서만 사용할 수 있습니다.  | 

## YAML 구문 사용
<a name="ec2rl_yamlsyntax"></a>

모듈 YAML 파일을 생성할 때 다음 사항을 고려해야 합니다.
+ 삼중 하이픈(`---`)은 문서의 명시적 시작을 나타냅니다.
+ `!ec2rlcore.module.Module` 태그는 데이터 스트림에서 객체를 생성할 때 호출할 생성자를 YAML 구문 분석기에 알려줍니다. `module.py` 파일 내부에서 생성자를 찾을 수 있습니다.
+ `!!str` 태그는 데이터 유형을 확인하지 않고 대신 콘텐츠를 문자열 리터럴로 해석하도록 YAML 구문 분석기에 지시합니다.
+ 파이프 문자(`|`)는 값이 리터럴 방식의 스칼라임을 YAML 구문 분석기에 알려줍니다. 이 경우 구문 분석기에는 모든 공백이 포함됩니다. 이는 들여쓰기 및 줄 바꿈 문자가 유지되므로 모듈에 중요합니다.
+ YAML 표준 들여쓰기는 공백 2개이며, 다음 예에서 확인할 수 있습니다. 스크립트에 대해 표준 들여쓰기(Python의 경우 공백 4개)를 유지한 다음, 모듈 파일 내에서 전체 콘텐츠를 공백 2개로 들여쓰기해야 합니다.

## 예제 모듈
<a name="ec2rl_example"></a>

예제(`mod.d/ps.yaml`):

```
--- !ec2rlcore.module.Module
# Module document. Translates directly into an almost-complete Module object
name: !!str ps
path: !!str
version: !!str 1.0
title: !!str Collect output from ps for system analysis
helptext: !!str |
  Collect output from ps for system analysis
  Requires --times= for number of times to repeat
  Requires --period= for time period between repetition
placement: !!str run
package: 
  - !!str
language: !!str bash
content: !!str |
  #!/bin/bash
  error_trap()
  {
      printf "%0.s=" {1..80}
      echo -e "\nERROR:	"$BASH_COMMAND" exited with an error on line ${BASH_LINENO[0]}"
      exit 0
  }
  trap error_trap ERR

  # read-in shared function
  source functions.bash
  echo "I will collect ps output from this $EC2RL_DISTRO box for $times times every $period seconds."
  for i in $(seq 1 $times); do
      ps auxww
      sleep $period
  done
constraint:
  requires_ec2: !!str False
  domain: !!str performance
  class: !!str collect
  distro: !!str alami ubuntu rhel suse
  required: !!str period times
  optional: !!str
  software: !!str
  sudo: !!str False
  perfimpact: !!str False
  parallelexclusive: !!str
```