Как мне настроить бродячую коробку, чтобы всегда иметь работу хрона?


Как настроить конфигурацию Vagrant так, чтобы при подготовке машины ее crontab автоматически настраивался? (бродяга обеспечен согласно шеф-повару(?) файлы)

В качестве примера я хотел бы настроить следующий cron:

5 * * * * curl http://www.google.com
1 6

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