启动时从文件加载 crontab

启动时从文件加载 crontab

我正在从 AWS(Amazon Web Services)上的 AMI(Amazon 系统映像)启动计算机,并希望从文件动态加载 crontab,而不是使用 AMI 的 crontab。我想到的一种方法是将 AMI 的 crontab 设置为:

@reboot crontab [CRONTAB_FILE]

这种方法的问题是 CRONTAB_FILE 中的 @reboot 计划不会使用它来运行。

还有其他方法可以实现这一目标吗?有什么方法可以在守护进程启动之前更改 crontab 吗?

我的机器正在运行 Debian,如果这有什么区别的话。

答案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 ,具体取决于我是否需要它作为设置配置的一部分或在配置完成。类似的东西应该对你有用。

相关内容