我为什么想用 supervisor 来管理服务呢?因为我在系统管理上属于处女座+任性的气质。

  1. OSX 下办公用的是普通用户,我不想在 root 权限下做过多设置污染我的系统。
  2. OSX 下的服务管理我感觉不是很便捷,毕竟 OSX 是倾向于黑盒用户体验,很多事情不透明。但是在服务管理一块我希望透明和自由一些。

所以我要说一下我怎么在尽量少污染 root 的情况下,使用普通用户配置 supervisor 并启动我的 mysql。

  • 下列操作如没有 sudo 命令,则均在 OSX 普通用户下操作,不涉及到提权到超级用户。
  • 另外我的用户名是 fangyunlin,所以我的 home 目录是 /Users/fangyunlin/

部署 supervisor

在 Linux 下常用的服务管理框架有三种:

  • 基于老时代的 sysV,也就是把启动配置放在 /etc/init.d 下,然后使用 chkconfig 和 service 命令进行管理服务。比如 CentOS 6 以及更低版本都是这样的。
  • 新时代的 systemd,也就是把启动配置放在 /usr/lib/systemd/system/ 下,然后使用 systemd 进行管理。
  • 以及新老通吃的 supervisor。

supervisor 是一套基于 python 的服务管理框架,某种意义上说他属于 sysV / systemd 的上层,他的启动也需要这两个或者其他服务管理框架来启动。这里不多说,这次主要讲 how to,不讲 why。

OSX 默认没有安装 pip。pip 是一个 python 的包管理工具,可以用于安装 python 库以及 python 程序。

sudo easy_install pip
pip install supervisor

这时候 supervisor 会安装到当前用户的 python 目录 /Users/fangyunlin/Library/Python/2.7/ 之下。

确认 python 目录的 bin 子目录在 PATH 环境变量中,可以直接调用 supervisor 系列命令。如果没有,可以按照下面添加到 ~/.bashrc 或者 ~/.zshrc 中:

export PYPATH_LIB_27=~/Library/Python/2.7
export PATH=$PATH:$GOPATH/bin:$PYPATH_LIB_27/bin

初始化 supervisord 配置

cp ~/Library/Python/2.7/lib/python/site-packages/supervisor/skel/sample.conf ~/Library/Python/2.7/etc/supervisord.conf

把配置中 [files] section 反注释掉:

[include]
files = supervisord.d/*.ini

创建子配置目录,等下会把 supervisor 服务配置丢到里面来。

mkdir /Users/fangyunlin/Library/Python/2.7/etc/supervisord.d/

把我要管理的服务配置到 supervisor 中

我有一个 MySQL 服务,启动命令是

/usr/local/bin/docker-compose up

嗯,我使用 docker 来使用 MySQL,还是因为我不想让一些服务污染我的 root 环境。docker 的事情有心情的话以后再说。大家当作是一个普通服务就好。

所以我在 /Users/fangyunlin/Library/Python/2.7/etc/supervisord.d/ 中添加一个文件名为 mysql.ini,内容如下:

[program:mysql]
command=/usr/local/bin/docker-compose up
directory=/Users/fangyunlin/docker/compose/mysql
autostart=true
autorestart=unexpected
startsecs=10
startretries=3

启动 supervisor

如果你希望登录用户即启动 supervisor,那就在 ~/Library/LaunchAgents/ 目录下新建个文件比如叫做 com.fangyunlin.supervisord.plist 。名字是否要遵循这个格式我不想去深究,反正依葫芦画瓢。内容如下:

<!-- /Library/LaunchDaemons/com.fangyunlin.supervisord.plist -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<dict>
<key>SuccessfulExit</key>
<false/>
</dict>
<key>Label</key>
<string>com.fangyunlin.supervisord</string>
<key>ProgramArguments</key>
<array>
<string>/Users/fangyunlin/Library/Python/2.7/bin/supervisord</string>
<string>-n</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>

这样就可以登录用户自启动了。不过我没这么做,我喜欢有需要的时候手动执行以下

supervisord

我觉得太黏人的女朋友不好,距离产生美。我不需要你就别自己启动了。

上面只是借口,其实也可以默认就启动 supervisord,但是 supervisord 管理的服务不要 autostart,通过命令

supervisorctl start mysql

这时候通过命令

supervisorctl status

就可以看到 mysql 跑起来了

最后比较了一下,通过 plist 启动 supervisord,supervisord 子服务不自动启动,按照需求 supervisorctl start 的方式……

真香……

参考资料

supervisord 文档:http://www.supervisord.org/configuration.html

docker-compose 文档:https://docs.docker.com/compose/compose-file/

在 OSX 下使用 supervisor 管理服务的更多相关文章

  1. Linux下 SSH远程管理服务

    第1章 SSH基本概述 1.1 SSH服务协议说明 SSH 是 Secure Shell Protocol 的简写,由 IETF 网络工作小组(Network Working Group )制定 在进 ...

  2. 如何使用supervisor管理你的应用

    1.前言 Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是UNIX-like系统下的一个进程管理工具,不支持Windo ...

  3. Linux服务:使用Supervisor管理进程

    一.简介 由于基本每个公司都会用到supervisor这个进程管理工具,这里简单阐述一下. Supervisor (http://supervisord.org) 是一个用Python写Linux下的 ...

  4. 使用 supervisor 管理 Celery 服务

    使用 supervisor 管理 Celery 服务 Celery 后台运行 如果我们想让celery worker运行在后台而不是终端上,在后台以守护进程的方式运行,我们可以使用supervisor ...

  5. 在centos7.6上部署前后端分离项目Nginx反向代理vue.js2.6+Tornado5.1.1,使用supervisor统一管理服务

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_102 这一次使用vue.js+tornado的组合来部署前后端分离的web项目,vue.js不用说了,前端当红炸子鸡,泛用性非常广 ...

  6. 微服务架构下分布式Session管理

    转载本文需注明出处:EAII企业架构创新研究院(微信号:eaworld),违者必究.如需加入微信群参与微课堂.架构设计与讨论直播请直接回复此公众号:“加群 姓名 公司 职位 微信号”. 一.应用架构变 ...

  7. CentOS 6.9下的Setup工具(用于管理服务/防火墙/网络配置/验证服务)

    说明:Setup工具套件好像是CentOS下特有的用于管理服务/防火墙/网络配置等,其实就是基于命令行模式界面的GUI工具.唯一特点就是方便. 安装: #安装Setup命令工具 yum -y inst ...

  8. 使用 supervisor 管理进程

    安装: # yum install python-setuptools # easy_install supervisor 如果已经安装了epel和python-pip, 也可以简单 pip inst ...

  9. Mac OSX 下用 Homebrew 安装 MongoDB 并配置到 WebStorm 中

    1. 安装 Ruby OSX 操作系统内置 Ruby,但如果没有 Ruby,则需先输入以下命令安装能够进行多版本ruby环境安装.管理和切换的命令行工具 RVM. 1.1 安装 RVM 打开终端输入以 ...

随机推荐

  1. cron定时任务介绍

    什么是cron? Cron是linux系统中用来定期执行或指定程序任务的一种服务或软件.与它相关的有两个工具:crond 和 crontab.crond 就是 cron 在系统内的宿主程序,cront ...

  2. python虚拟环境 -- virtualenv , virtualenvwrapper

    virtualenv -- python虚拟沙盒 有人说:virtualenv.fabric 和 pip 是 pythoneer 的三大神器. 一.安装 pip install virtualenv ...

  3. Active Directory、Exchange、单点登录,企业账号统一管理解决方案

    现在的公司一般都会有很多内部管理系统,比如OA.ERP.CRM.邮件系统等.员工入职之后如果每个系统都创建一个账号和密码,首先员工记系统账号就是一件非常头疼的事情,如果公司有一百个系统那就得创建一百个 ...

  4. java使用elasticsearch进行模糊查询-已在项目中实际应用

    java使用elasticsearch进行模糊查询 使用环境上篇文章本人已书写过,需要maven坐标,ES连接工具类的请看上一篇文章,以下是内容是笔者在真实项目中运用总结而产生,并写的是主要方法和思路 ...

  5. [Python]运算符的优先级顺序

    运算符 描述 ** 指数 (最高优先级) ~ + - 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@) * / % // 乘,除,取模和取整除 + - 加法减法 >> & ...

  6. Monad、Actor与并发编程--基于线程与基于事件的并发编程之争

    将线程.事件.状态等包装成流的源. 核心:解决线程的消耗和锁的效率问题. Java和Node.js可以说分别是基于线程和基于事件的两个并发编程代表,它们互相指责瞧不起对方,让我们看看各种阵营的声音: ...

  7. hadoop备战:yarn框架的搭建(mapreduce2)

    昨天没有写好了没有更新,今天一起更新,yarn框架也是刚搭建好的. 我这里把hadoop放在了我的个人用户hadoop下了,你也能够尝试把它放在/usr/local,考虑的问题就相对多点. 主要的软硬 ...

  8. Spark项目之电商用户行为分析大数据平台之(三)大数据集群的搭建

    Zookeeper集群搭建 http://www.cnblogs.com/qingyunzong/p/8619184.html Hadoop集群搭建 http://www.cnblogs.com/qi ...

  9. ORACLE 11GR2常用命令

    一.ORACLE的启动和关闭 1.在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a.启动ORACLE系统 oracle>svrmgrl ...

  10. WorldWind源码剖析系列:图层管理器按钮类LayerManagerButton和菜单条类MenuBar

    WorldWindow用户定制控件类中所包含的的可视化子控件主要有:图层管理器按钮类LayerManagerButton和菜单条类MenuBar.BmngLoader类中所包含的的可视化子控件主要有: ...