AWS(Amazon Web Services)의 AMI(Amazon Machine Image)에서 컴퓨터를 부팅하고 AMI의 crontab을 사용하는 대신 파일에서 crontab을 동적으로 로드하려고 합니다. 내가 생각한 한 가지 방법은 AMI의 crontab을 다음과 같이 설정하는 것입니다.
@reboot crontab [CRONTAB_FILE]
이 접근 방식의 문제점은 CRONTAB_FILE의 @reboot 계획이 이를 실행하는 데 사용되지 않는다는 것입니다.
이를 달성하는 다른 방법이 있습니까? 데몬이 시작되기 전에 crontab을 변경할 수 있는 방법이 있습니까?
내 컴퓨터는 데비안을 실행하고 있습니다. 차이가 있다면요.
답변1
나는 보통 crontab -u user file
/etc/rc.local과 같은 곳에 cron 탭을 로드합니다. 그 외에는 별로 할 일이 없습니다.
나는 보통 다음과 같은 일을 합니다: (rc.local에서)
wget http://169.254.169.254/latest/meta-data/instance-id -O /tmp/instance
INSTANCE=`cat /tmp/instance`
KEY="/etc/pk.pem"
CERT="/etc/cert.pem"
CONFIG=`ec2-describe-tags -K $KEY -C $CERT -F "resource-id=$INSTANCE" -F "key=ConfigBucket" | awk '{print $5}'`
if [ -n $CONFIG ]; then
s3cmd -c /etc/.s3cfg sync s3://$CONFIG/etc/ /etc
chmod +x /etc/post-ec2-start.sh
/etc/post-ec2-start.sh
fi
exit 0
그런 다음 /etc/post-ec2-start.sh에서
#!/bin/bash
wget http://169.254.169.254/latest/meta-data/instance-id -O /tmp/instance
INSTANCE=`cat /tmp/instance`
KEY="/etc/pk.pem"
CERT="/etc/cert.pem"
VOL1="vol-12345678"
VOL2="vol-87654321"
IP="54.123.123.132"
ec2-attach-volume -K $KEY -C $CERT $VOL1 -i "$INSTANCE" -d /dev/sdf
ec2-attach-volume -K $KEY -C $CERT $VOL2 -i "$INSTANCE" -d /dev/sdg
ec2-associate-address -K $KEY -C $CERT -i "$INSTANCE" $IP
sleep 90
mount /dev/sdf1 /home/
mount /dev/sdg1 /var/lib/mysql
hostname some.fqdn.com
#register crontabs
#crontab -u coteyr /etc/coteyr.crontab
crontab -u root /etc/root.crontab
#fix home directoris
cd /home/
for i in *; do
useradd $i
chown -R $i:$i /home/$i
done
이것의 장점은 S3에서 구성을 로드한 다음 해당 구성을 기반으로 실행할 수 있다는 것입니다. (재)시작 시 실행할 항목이 필요한 경우 설정 구성의 일부로 필요한지 아니면 구성이 완료된 후에 필요한지 여부에 따라 /etc/post-ec2-start.sh 또는 /etc/rc.local에 추가하면 됩니다. 완벽한. 비슷한 것이 당신에게 도움이 될 것입니다.