Init script
Those scripts are located in directory /etc/init.d. Note: some of them have been converted to upstart jobs (see next section) and they should not be invoked directly. To check whether it's a upstart job, check directory whether file /etc/init/<job>.conf exists for a specific job.
upstart jobs
http://upstart.ubuntu.com/ Use "man 5 init" to see the syntax of the conf file.
Each upstart job has a conf file in directory /etc/init/<job>.conf. You should not directly invoke the init script to start/stop the job. You should use commands initctl to do that. E.g. initctl restart hostname.
initctl list will list upstart jobs that are running.
service
It can be used to interact with the init scripts, no matter they are upstart jobs or regular init script. For upstart jobs, it does not run /etc/init.d/<job> . Instead it runs "start <job>" directly.
E.g. service hostname status
invoke-rc.d
Another tool to start/stop init jobs. In my opinion you should use command service because invoke-rc.d does NOT detect whether the job is a upstart job or regular init job. Usually, this is not a big deal because upstart job shell script automatically calls initctrl related commands (start, stop, reload, etc) .
Example - network
I will give an example about how network interfaces are managed by init daemon.
As you may know, ifup and ifdown can be used to bring up or down network interfaces.
/etc/network/interfaces are used by ifup and ifdown to know how you want your system to connect to the network.
Sample file
# interfaces lo and eth0 should be started when ifup -a is invoked.
auto lo eth0
# eth1 is allowed to be brought up by subsystem hotplug.
allow-hotplug eth1
# For interface lo, it should use internet protocol and it is a loopback device.
iface lo inet loopback
# Interface eth1 uses internet protocol and dhcp for configuration
iface eth1 inet dhcp
- For upstart job networking, its config file is /etc/init/networking.conf:
description "configure virtual network devices"
start on (local-filesystems
and stopped udevtrigger)task
pre-start exec mkdir -p /var/run/network
exec ifup -a
Notice the last line? Yes, it invoke ifup to bring up those interfaces that are marked as "auto" in file /etc/network/interfaces.
- Job network-interface is used when a network interface is added or removed. Its config file is /etc/init/network-interface.conf
description "configure network device"
start on net-device-added
stop on net-device-removed INTERFACE=$INTERFACEinstance $INTERFACE
pre-start script
if [ "$INTERFACE" = lo ]; then
# bring this up even if /etc/network/interfaces is broken
ifconfig lo 127.0.0.1 up || true
initctl emit -n net-device-up \
IFACE=lo LOGICAL=lo ADDRFAM=inet METHOD=loopback || true
fi
mkdir -p /var/run/network
exec ifup --allow auto $INTERFACE
end scriptpost-stop exec ifdown --allow auto $INTERFACE
Line "exec ifup --allow auto $INTERFACE" bring up the newly added interface if it is set to be brought up automatically. The trigger event is "net-device-added" or "net-device-removed" which is sent by upstart-udev-bridge. It basically forwards events received from udev to init daemon. When your network interface (e.g. eth0) is detected by udev, finally a net-device-added event is sent to network-interface upstart job which runs ifup to bring it up.
- upstart job hostname. (/etc/init/hostname.conf). It includes following line:
exec hostname -b -F /etc/hostname
Now you should know how to change hostname.
Edit file /etc/hostname, run command "sudo service start hostname", "sudo start hostname", or "sudo initctl start hostname".
No comments:
Post a Comment