Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9413254
  • 博文数量: 1748
  • 博客积分: 12961
  • 博客等级: 上将
  • 技术积分: 20070
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 11:25
个人简介

偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.

文章分类

全部博文(1748)

文章存档

2024年(24)

2023年(26)

2022年(112)

2021年(217)

2020年(157)

2019年(192)

2018年(81)

2017年(78)

2016年(70)

2015年(52)

2014年(40)

2013年(51)

2012年(85)

2011年(45)

2010年(231)

2009年(287)

分类: Android平台

2016-08-16 10:42:52


upstart把应用封装成系统服务


http://blog.fens.me/linux-upstart/

永驻后台之程序或者脚本

点击(此处)折叠或打开

  1. # /etc/init/cs.conf
  2. # cat /etc/issule -> 14.04 或者 Debian (可能有debian 由的systemd的方案, 查看最下面) GNU/Linux 8 已验证
  3. # 启用 sudo start cs
  4. # 停止 sudo stop cs

  5. description "iibul_service"
  6. author "iibull"

  7. start on startup
  8. stop on shutdown

  9. respawn

  10. console output

  11. # if to run App, then
  12. #exec /work/myServ #启用一个后台的应用程序
  13. # if you want to script
  14. env var=bar
  15. export var

  16. pre-start script
  17.         logger "pre-start: before: var=$var"
  18.         var=pre-start
  19.         export var
  20.         logger "pre-start: after: var=$var"
  21. end script

  22. post-start script
  23.         logger "post-start: before: var=$var"
  24.         var=post-start
  25.         export var
  26.         logger "post-start: after: var=$var"
  27. end script

  28. script
  29.         logger "script: before: var=$var"
  30.         var=main
  31.         export var
  32.         sleep 60000
  33.         logger "script: after: var=$var"
  34. end script

  35. post-stop script
  36.         logger "post-stop: before: var=$var"
  37.         var=post-stop
  38.         export var
  39.         logger "post-stop: after: var=$var"
  40. end script





%E4%B8%AD%E8%87%AA%E5%AE%9A%E4%B9%89%E6%9C%8D%E5%8A%A1/
在Ubuntu中定义一些服务,可以对该服务进行全局控制,比较常见的就是用sudo service servcie_name start/stop/restart 进行服务的启停


在/etc/init.d/目录下面定义控制服务的脚本



点击(此处)折叠或打开

  1. service_name="service_name"
  2. service_script_path="service_script_path"

  3. start()
  4. {
  5.     echo "$service_name service start"
  6.     chmod a+x $service_script_path && nohup ./$service_script_path
  7. }

  8. stop()
  9. {
  10.     echo "$service_name service stop"
  11.     server_process_id=`ps -aux | grep $service_name | cut -d " " -f 6`
  12.     echo "server_process_id="server_process_id
  13.     kill -9 $server_process_id
  14. }

  15. case $1 in
  16. start)
  17.     start
  18.     ;;
  19. stop)
  20.     stop
  21.     ;;
  22. restart)
  23.     echo "resert the $service_name"
  24.     stop
  25.     start
  26.     ;;
  27. *)
  28.     echo "undefine operation"
  29.     ;;
  30. esac

自己写了个服务脚本扔到/etc/init.d/,service启停服务目前OK了。 
使用update-rc.d命令可以设置服务2-5级别开机自动启动。 

参照 /etc/init.d/README文档。

点击(此处)折叠或打开

  1. ### BEGIN INIT INFO
  2. # Provides: skeleton
  3. # Required-Start: $remote_fs $syslog
  4. # Required-Stop: $remote_fs $syslog
  5. # Should-Start: $portmap
  6. # Should-Stop: $portmap
  7. # X-Start-Before: nis
  8. # X-Stop-After: nis
  9. # Default-Start: 2 3 4 5
  10. # Default-Stop: 0 1 6
  11. # X-Interactive: true
  12. # Short-Description: Example initscript
  13. # Description: This file should be used to construct scripts to be
  14. # placed in /etc/init.d.
  15. ### END INIT INFO

然后使用命令update-rc.d default myserv 来设置我自定义的服务开机自启动

在rc2-5.d目录下生成了S20myserv

改变优先级别

点击(此处)折叠或打开

  1. /etc/rc2.d/S20redis-server
  2. /etc/rc2.d/S21rtds2
  3. 2是Ubuntu默认的runlevel,S表示Start的意思。
  4. 20的优先级比21高,也就是说S20服务先启动,然后才轮到S21服务启动。

  5. 删除原来运行级的启动软链接:
  6. sudo update-rc.d -f redis-server remove
  7. sudo update-rc.d -f rtds2 remove

  8. 设置新的服务启动优先级:
  9. sudo update-rc.d redis-server defaults 20
  10. sudo update-rc.d rtds2 defaults 21

例如我们要添加一个开机脚本 运行 

点击(此处)折叠或打开

# 采自于 http://minecraft.gamepedia.com/Tutorials/Ubuntu_startup_script
#为服务制定专用的用户组 和 分配服务组目录权限

sudo adduser --system --no-create-home --home /srv/minecraft-server minecraft
sudo addgroup --system minecraft
sudo adduser minecraft minecraft # this adds user "minecraft" the group "minecraft"
sudo chown -R minecraft.minecraft /srv/minecraft-server

#写开机脚本 /etc/init/minecraft-server.conf
#create and edit the start/stop script creating a new file under /etc/init/minecraft-server
#(NOT /etc/init.d but /etc/init (without the .d) ) 
#make sure that you save the file as minecraft-server.conf
sudo nano /etc/init/minecraft-server.conf

#脚本内容如下
## description "start and stop the minecraft-server"

start on runlevel [2345]
stop on runlevel [^2345]

console log
chdir YOUR_INSTALLATION_DIRECTORY
setuid minecraft
setgid minecraft

respawn
respawn limit 20 5

exec /usr/bin/java -Xms1536M -Xmx2048M -jar minecraft_server.jar nogui

#脚本各行的解释信息如下
-----------------------------------------------------------------
# description "start and stop the minecraft-server" <-- Adds a tip to what this script does.

start on runlevel [2345] <-- 何时开启服务. Runlevels 2, 3, 4, and 5 are the "normal operation".
stop on runlevel [^2345] <-- 何时停止服务. The ^ means NOT.

console log <-- Log的提示方式
chdir YOUR_INSTALLATION_DIRECTORY <-- 改变当前的活动目录.
setuid minecraft <-- 切换到 minecraft 用户
setgid minecraft <-- 切换到 minecraft 用户组

respawn <-- 当检测到程序异常时, 允许程序自动重启
respawn limit 20 5 <--自动重启 20次/5秒内

exec /usr/bin/java -Xms1536M -Xmx2048M -jar minecraft_server.jar nogui <-- Below...
'exec' > 执行命令
'/usr/bin/java' > 调用的程序
'-Xms1536M' > Sets minimum allocated memory limit.
'-Xmx2048M' > Sets MAXIMUM allowable memory limit.
'-jar minecraft-server.jar' > Tells Java to run the jarfile minecraft_server.jar
'nogui' > Tells minecraft-server.jar to run without a GUI. (Graphical screen).

#现在是的脚本生效
sudo initctl reload-configuration

#开关服务
sudo start minecraft-server
sudo stop minecraft-server
#查看日志
sudo tail /var/log/upstart/minecraft-server.log

###########################################################################################

#在有systemd的系统内,可以这样做,15.04之后systemd 被取消了。

sudo gedit /etc/systemd/system/minecraft-server.service

[Unit] 
Description=start and stop the minecraft-server 

[Service]
WorkingDirectory=/srv/minecraft-server
User=minecraft
Group=minecraft
Restart=on-failure
RestartSec=20 5
ExecStart=/usr/bin/java -Xms1536M -Xmx1536M -jar minecraft_server.jar nogui

[Install]
WantedBy=multi-user.target
Alias=minecraft-server.service

sudo service minecraft-server start
sudo systemctl enable minecraft-server
systemctl status minecraft-server.service


SSH 客户端执行GUI程序,实现在客户端上

DISPLAY=:0.0
执行你的程序即可。




阅读(4644) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~