我如何设置一个 Vagrant box 以始终有一个 cron 作业?
How do I set up a Vagrant box to always have a cron job?
如何配置我的 Vagrant 配置,以便在我配置机器时自动配置其 crontab? (vagrant 是根据 Chef(?) 文件提供的)
例如,我想设置以下 cron:
5 * * * * curl http://www.google.com
无需 Chef/Puppet/Ansible 而使用 shell.
即可轻松完成此类基本配置
Vagrant docs 很好地涵盖了这个基本配置,他们的例子是让盒子从 boostrap.sh 下载 Apache。
同样,您可以按照相同的步骤编辑 Vagrantfile,以便在配置时调用 bootstrap.sh 文件:
Vagrant.configure("2") do |config|
...
config.vm.provision :shell, path: "bootstrap.sh"
...
end
然后您可以在与 Vagrantfile 相同的目录中创建一个 bootstrap.sh 文件,其中包含如下内容:
#!/bin/bash
# Adds a crontab entry to curl google.com every hour on the 5th minute
# Cron expression
cron="5 * * * * curl http://www.google.com"
# │ │ │ │ │
# │ │ │ │ │
# │ │ │ │ └───── day of week (0 - 6) (0 to 6 are Sunday to Saturday, or use names; 7 is Sunday, the same as 0)
# │ │ │ └────────── month (1 - 12)
# │ │ └─────────────── day of month (1 - 31)
# │ └──────────────────── hour (0 - 23)
# └───────────────────────── min (0 - 59)
# Escape all the asterisks so we can grep for it
cron_escaped=$(echo "$cron" | sed s/\*/\\*/g)
# Check if cron job already in crontab
crontab -l | grep "${cron_escaped}"
if [[ $? -eq 0 ]] ;
then
echo "Crontab already exists. Exiting..."
exit
else
# Write out current crontab into temp file
crontab -l > mycron
# Append new cron into cron file
echo "$cron" >> mycron
# Install new cron file
crontab mycron
# Remove temp file
rm mycron
fi
默认情况下 Vagrant provisioners 运行 为 root,所以这将附加一个 cron 作业到 root 用户的 crontab 假设它不存在。如果你想将它添加到 vagrant 用户的 crontab,那么你需要 运行 将 privileged
标志设置为 false
:
config.vm.provision :shell, path: "bootstrap.sh", privileged: false
如何配置我的 Vagrant 配置,以便在我配置机器时自动配置其 crontab? (vagrant 是根据 Chef(?) 文件提供的)
例如,我想设置以下 cron:
5 * * * * curl http://www.google.com
无需 Chef/Puppet/Ansible 而使用 shell.
即可轻松完成此类基本配置Vagrant docs 很好地涵盖了这个基本配置,他们的例子是让盒子从 boostrap.sh 下载 Apache。
同样,您可以按照相同的步骤编辑 Vagrantfile,以便在配置时调用 bootstrap.sh 文件:
Vagrant.configure("2") do |config|
...
config.vm.provision :shell, path: "bootstrap.sh"
...
end
然后您可以在与 Vagrantfile 相同的目录中创建一个 bootstrap.sh 文件,其中包含如下内容:
#!/bin/bash
# Adds a crontab entry to curl google.com every hour on the 5th minute
# Cron expression
cron="5 * * * * curl http://www.google.com"
# │ │ │ │ │
# │ │ │ │ │
# │ │ │ │ └───── day of week (0 - 6) (0 to 6 are Sunday to Saturday, or use names; 7 is Sunday, the same as 0)
# │ │ │ └────────── month (1 - 12)
# │ │ └─────────────── day of month (1 - 31)
# │ └──────────────────── hour (0 - 23)
# └───────────────────────── min (0 - 59)
# Escape all the asterisks so we can grep for it
cron_escaped=$(echo "$cron" | sed s/\*/\\*/g)
# Check if cron job already in crontab
crontab -l | grep "${cron_escaped}"
if [[ $? -eq 0 ]] ;
then
echo "Crontab already exists. Exiting..."
exit
else
# Write out current crontab into temp file
crontab -l > mycron
# Append new cron into cron file
echo "$cron" >> mycron
# Install new cron file
crontab mycron
# Remove temp file
rm mycron
fi
默认情况下 Vagrant provisioners 运行 为 root,所以这将附加一个 cron 作业到 root 用户的 crontab 假设它不存在。如果你想将它添加到 vagrant 用户的 crontab,那么你需要 运行 将 privileged
标志设置为 false
:
config.vm.provision :shell, path: "bootstrap.sh", privileged: false