介紹
upstart 用來管理你的服務, 在機器啟動後自動幫你啟動你的服務, 並且可以選擇在服務死掉後自動重新啟動它
ubuntu 16.04 不支援 upstart 改用 systemd
First Example
這是個簡單的範例只有執行 echo
, 執行完也不會有任何背景的 process 在執行
建立 /etc/init/testjob.conf
:
description "First example"
author "test"
start on runlevel [2345]
exec echo `date` >> /tmp/testjob.log
測試 conf 語法是否正確
$ init-checkconf /etc/init/testjob.conf
File /etc/init/testjob.conf: syntax ok
開始啟動
$ sudo service testjob start
testjob stop/waiting
顯示結果 /tmp/testjob.log
:
Tue Aug 8 11:32:54 UTC 2017
Second Example
這個範例可以保持你想要的 process 在背景執行
首先我們要先有一個不會停止的程式供測試, /tmp/test.sh
:
#!/bin/sh
while true
do
echo `date` >> /tmp/testjob.log
/bin/sleep 1s
done
給予執行權限
chmod +x /tmp/test.sh
建立 /etc/init/testjob.conf
:
description "Second example"
author "test"
start on runlevel [2345]
exec /tmp/test.sh
開始啟動
$ sudo service testjob start
testjob stop/waiting
背景可以看到它一直在執行
PID %CPU %MEM RSS COMMAND
20755 0.0 0.0 648 test.sh
每秒可以看到執行結果 /tmp/testjob.log
:
Tue Aug 8 12:43:02 UTC 2017
手動停止, 就會把背景執行的程式關掉了
sudo service testjob stop
但是如果它被 kill 掉, 就不會再背景執行
sudo kill -9 20755
讓程式死了也能重新執行
在 /etc/init/testjob.conf
最後面加上
respawn
即使被 kill 了, 它還是會被重新執行
指令
重新讀取 upstart 設定
initctl reload-configuration
amz-linux 剛新增 config 完要先執行此指令
手動開啟
sudo service testjob start
or
sudo start testjob
or
sudo initctl start testjob
手動關閉
sudo service testjob stop
or
sudo stop testjob
or
sudo initctl stop testjob
查看在 init 清單各程序運作的狀況
sudo initctl list
其他設定
User
它預設執行的 user 是 root
, 你可以改成你想要的
setuid ec2-user
Respawn
30 秒內, 被 kill 3 次, 就會不再執行了
respawn limit 3 30
將 nginx 加到 upstart 清單裡
nginx 安裝完本身一開機就會執行, 先把它取消掉
sudo update-rc.d nginx disable
新增 /etc/init/nginx.conf
:
# nginx
description "nginx http daemon"
author "George Shammas <georgyo@gmail.com>"
start on (filesystem and net-device-up IFACE!=lo)
stop on runlevel [!2345]
env DAEMON=/usr/sbin/nginx
env PID=/var/run/nginx.pid
expect fork
respawn
respawn limit 10 5
#oom never
pre-start script
$DAEMON -t
if [ $? -ne 0 ]
then exit $?
fi
end script
exec $DAEMON
[註] Fix nginx start up script was run before the network interface was up
start on (filesystem and net-device-up IFACE!=lo)
其他
- upstart log path
- ubuntu:
/var/log/upstart/
- amz-linux: 沒有
ref :