개요
Bash 쉘 스크립트에서 sshpass를 이용해 원격 서버의 crontab에 스케쥴링 설정을 추가하려고 한다.
방법을 적어둔다
+ 기존 항목에서 추가할 항목을 확인하거나 수정하는 등의 작업은 다루지 않는다.
쉘로 crontab 설정
crontab_set_str='crontab에 설정할 내용'
(crontab -l 2>/dev/null; echo "$crontab_set_str") | crontab -
동작 방식
1. crontab -l 2>/dev/null : 현재 crontab 항목 확인
2. echo "$crontab_set_str" : 기존 crontab 항목에 추가할 항목 출력. 1번을 함께 고려하면 기존 항목과 같이 출력하는 것이 된다.
3. crontab - : 전달받은 파일, 표준 입력 등으로 크론탭 설정
즉, 파이프를 이용해 기존 crontab 내용과 신규 추가 내용을 crontab 명령에 표준입력으로 전달하여 추가한다.
sshpass를 통한 설정
sshpass로 원격 서버에 crontab을 설정할 때는 위의 명령어를 그대로 sshpass로 전달하면 된다.
#!/bin/sh
SSH_PASSWD='SSH 비밀번호'
SSH_USERNAME='SSH 계정명'
IP='원격지 IP'
SSH_PORT='SSH 포트번호'
crontab_set_str='crontab에 설정할 내용'
sshpass -p $SSH_PASSWD ssh -p $SSH_PORT -o StrictHostKeyChecking=no -t $SSH_USERNAME@$IP '(crontab -l 2>/dev/null; echo "$crontab_set_str") | crontab -'
참고 문서
How do I create a crontab through a script
https://linux.die.net/man/1/crontab