*백업 목적
솔라나 테스트넷 밸리데이터를 구동해보면서 일정량(약 수백개) 이상의 테스트넷 SOL이 필요했다.
근데 airdrop으로는 1 SOL씩만 얻을 수 있어서 같은 커맨드를 여러번 써야 했고, 한번에 일정횟수 이상 시도 시
Error: airdrop request failed. This can happen when the rate limit is reached.
위와 같은 한도 초과 같은 메시지를 뱉었다.
그래서 커맨드를 for문으로 100번 돌리는 airdrop.sh 라는 shell 실행파일을 만들었다. 그리고 백그라운드에서 알아서 돌아가게 하기 위해 systemctl 로 service 파일을 돌리는 systemd 를 구성해보았다.
~/airdrop.sh
#!/bin/bash
for i in $(seq 1 100)
do
solana airdrop 1 -k ~/validator-keypair.json
sleep 30
done
i가 1부터 100까지 돌면서 do ~ done 안의 부분을 실행하는 for문이다. airdrop을 받고, 30초 자고 일어나서 다시 돌린다.
- sh 파일은 위의 #!/bin/bash 가 없으면 실행되지 않으므로 유의하자.
- sudo chmod 755 airdrop.sh 등으로 실행 권한을 주자. vi나 nano 로 파일을 생성하면 소유자는 사용자, 앞에 sudo를 붙여서 파일을 생성하면 소유자는 root가 된다.
<vi>
저장 후 종료는 esc를 누르고 :wq, 저장하지 않고 종료는 esc를 누르고 :q 후 엔터
강제성을 더하려면 :q! 처럼 느낌표를 붙인다.
편집은 i 를 누르고 하면 된다.
<nano>
저장: ctrl+s
종료: ctrl+x
유용한 파일/디렉토리 권한 정리글:
해당 파일이 있는 디렉토리에서 ./airdrop.sh 로 수동 실행을 해볼 수 있지만, 그 위치에서 실행되기 때문에 해당 창을 닫으면 실행이 중지되고, 결과가 계속 출력되기 때문에 해당 창에서 다른 커맨드를 입력할 수 없게 되는 불편함이 있다.
이를 피하려면 백그라운드에서 시스템 service 파일을 돌리면 된다.
/etc/systemd/system/airdrop.service
[Unit]
Description=Solana Airdrop
After=network.target
[Service]
Type=simple
Restart=on-failure
RestartSec=1
User=<user명>
ExecStart=/home/<user명>/airdrop.sh
Environment=PATH=/bin:/usr/bin:/home/<user명>/.local/share/solana/install/active_release/bin
Environment=SOLANA_METRICS_CONFIG=host=https://metrics.solana.com:8086,db=tds,u=testnet_write,p=c4fa841aa918bf8274e3e2a44d77568d9861b3ea
[Install]
WantedBy=multi-user.target
*root 권한으로 만들 것. sudo su - 하고 만들거나, sudo vi 혹은 sudo nano 를 사용하자.
- User가 ExecStart로 지정해놓은 경로의 파일에 대해 권한이 있는지 확인하자.
시스템 작동 커맨드(systemctl)
sudo systemctl start airdrop.service // 실행
sudo systemctl enable --now airdrop.service // 재부팅 시 자동 재시작 등록
sudo systemctl stop airdrop.service // 중지
systemctl status airdrop.service // 실행 상태 확인
시스템 로그 확인
journalctl -u airdrop.service // 서비스 로그 확인
journalctl -xe // 전체 로그 확인
// 때에 따라 sudo가 필요할 수 있음.
- shift+g : 로그의 맨 끝 줄로 이동
- 로그 나가기 : ctrl+c
// journalctl -u airdrop.service 출력 예시
Jun 21 06:08:11 airdrop.sh[3527362]: Signature: x26xU89DxBQ33nCdDtGB8iATxZXT5NQTzZNnKai6TdJvpvcJoD238JTRy85tkzG2nYLKbPsD7Rv5wgG5Frp7LiH
Jun 21 06:08:11 airdrop.sh[3527362]: 126.287615118 SOL
Jun 21 06:08:41 airdrop.sh[3538053]: Requesting airdrop of 1 SOL
Jun 21 06:08:46 airdrop.sh[3538053]: Signature: LqEMj8Bo4qLk1jffkDxkPCMGGeC442ZtQ43fmCsMPJx9Wotvr7GPhDfSKzXcs3mnPXHYZBeXbn9TAksvhdzjmtm
Jun 21 06:08:46 airdrop.sh[3538053]: Balance unchanged
Jun 21 06:08:46 airdrop.sh[3538053]: Run `solana confirm -v LqEMj8Bo4qLk1jffkDxkPCMGGeC442ZtQ43fmCsMPJx9Wotvr7GPhDfSKzXcs3mnPXHYZBeXbn9TAksvhdzjmtm` for more info
...
Jun 21 06:11:21 airdrop.sh[3584255]: Requesting airdrop of 1 SOL
Jun 21 06:11:23 airdrop.sh[3584255]: Error: airdrop request failed. This can happen when the rate limit is reached.
Jun 21 06:11:53 airdrop.sh[3603063]: Requesting airdrop of 1 SOL
Jun 21 06:11:55 airdrop.sh[3603063]: Error: airdrop request failed. This can happen when the rate limit is reached.
// 실행 전 solana balance
68.300795118 SOL
// 실행 후 solana balance
130.285515118 SOL
100번 실행했는데 62번 airdrop을 받고 solana airdrop 커맨드 설정 제한으로 나머진 뱉은 것으로 보인다.
'Linux' 카테고리의 다른 글
[Linux] systemd service 옵션/작성법/사용법(systemctl 명령어) (2) | 2022.02.08 |
---|