How to run nginx.service after /vagrant is mounted

本小妞迷上赌 提交于 2019-12-03 03:44:21

I wrote a post how I'm using udev event to restart nginx and php5-fpm.

In short I'm adding /etc/udev/rules.d/50-vagrant-mount.rules with rule:

SUBSYSTEM=="bdi",ACTION=="add",RUN+="/bin/bash /root/.udev-mount-restart-services.sh"

And the script /root/.udev-mount-restart-services.sh is:

sleep 5 # wait for a bit for NFS to make sure resources are available
systemctl restart php5-fpm > /dev/null 2>&1
systemctl restart nginx > /dev/null 2>&1

Using the mount.target unit seems to work.

Vagrantfile:

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/wily64"
  config.vm.provision :shell, path: "bootstrap.sh"

  # Disabling mounting of the /vagrant directory to make sure ngnix is blocked
  # Comment this out to allow the shared folder
  config.vm.synced_folder ".", "/vagrant", disabled: true
end

bootstrap.sh:

#!/usr/bin/env bash

apt-get update
apt-get install -y nginx

# Make vagrant.mount loosely dependent on nginx.service
sed -i 's/WantedBy=multi-user.target/WantedBy=vagrant.mount/' /lib/systemd/system/nginx.service
systemctl daemon-reload

# Update service symlinks
systemctl disable nginx.service
systemctl enable nginx.service

Test this by running vagrant reload to cause the VM to boot without the /vagrant directory mounted. Log into the VM and see that nginx isn't running:

vagrant@vagrant-ubuntu-wily-64:~$ sudo systemctl status nginx.service 
● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: inactive (dead)

Then comment out the Vagrantfile line that disables the shared folder and vagrant reload again. Log into the VM again and see that nginx is running:

vagrant@vagrant-ubuntu-wily-64:~$ systemctl status nginx.service 
● nginx.service - A high performance web server and a reverse proxy server
  Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
  Active: active (running) since Mon 2016-07-25 04:28:00 UTC; 42s ago
 Process: 1152 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
 Process: 1146 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 1156 (nginx)
  Memory: 7.4M
     CPU: 17ms
  CGroup: /system.slice/nginx.service
          ├─1156 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
      └─1157 nginx: worker process

edit /lib/systemd/system/nginx.service and change WantedBy directive under Install section...

WantedBy=vagrant.mount

You can check if the vagrant.mount event exists via: systemctl list-units vagrant.mount. You should see this:

UNIT          LOAD   ACTIVE SUB     DESCRIPTION
vagrant.mount loaded active mounted /vagrant

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

1 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

Summarization previous answers and comments in terms of Ansible (if used for provision):

- name: Copy Nginx Systemd unit to /etc/
  copy:
    src: /lib/systemd/system/nginx.service
    dest: /etc/systemd/system/nginx.service
    remote_src: yes

- name: Change Nginx Systemd unit
  lineinfile:
    path: /etc/systemd/system/nginx.service
    regexp: '^WantedBy='
    line: 'WantedBy={{ vagrant_mount_unit }}'
    state: present

- name: Systemd daemon reload
  systemd:
    daemon_reload: yes

- name: Disable Nginx
  service:
    name: nginx
    enabled: no

- name: Enable Nginx
  service:
    name: nginx
    enabled: yes

Replace {{ vagrant_mount_unit }} by Vagrant mount unit name. It depends from mount point, e.g. if mount point is /home/vagrant/app, unit name would be home-vagrant-app.mount.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!