Как мне настроить бродячую коробку, чтобы всегда иметь работу хрона?
Как настроить конфигурацию Vagrant так, чтобы при подготовке машины ее crontab автоматически настраивался? (бродяга обеспечен согласно шеф-повару(?) файлы)
В качестве примера я хотел бы настроить следующий cron:
5 * * * * curl http://www.google.com
1 ответ:
Базовое обеспечение для таких вещей можно легко сделать без Chef / Puppet/Ansible и вместо этого использовать оболочку.
Vagrant docs довольно хорошо описывают эту базовую подготовку для своего примера загрузки Apache из коробки. boostrap.sh.
Аналогично вы можете выполнить те же действия при редактировании вашего Vagrantfile, чтобы вызвать a bootstrap.sh файл при подготовке:
Vagrant.configure("2") do |config| ... config.vm.provision :shell, path: "bootstrap.sh" ... end
Затем вы можете создать bootstrap.sh файл в том же каталоге, что и ваш Vagrantfile, который будет содержать что-то вроде:
#!/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 будет добавлено к crontab пользователя root, если оно еще не существует. Если вы хотите добавить его в crontab бродячего пользователя, то вам нужно будет запустить provisioner с флагом
privileged
, установленным вfalse
:config.vm.provision :shell, path: "bootstrap.sh", privileged: false