V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Livid
V2EX  ›  Ubuntu

在 Ubuntu 18.04 里,为一个服务写启动脚本的最好的方式是?

  •  
  •   Livid · 2018-11-13 15:14:44 +08:00 · 7758 次点击
    这是一个创建于 2200 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有一些用了好多年的 init.d 脚本,最近觉得似乎应该更新一下了。
    48 条回复    2018-11-26 16:28:56 +08:00
    hei1000
        1
    hei1000  
       2018-11-13 15:15:31 +08:00
    不是 systemd ?我们这边 16.04 是这样的
    Mithrandir
        2
    Mithrandir  
       2018-11-13 15:17:29 +08:00   ❤️ 2
    肯定是 systemd service 啊
    mason961125
        3
    mason961125  
       2018-11-13 15:17:31 +08:00   ❤️ 1
    systemd
    shallyy
        4
    shallyy  
       2018-11-13 15:17:36 +08:00
    好奇站长同时使用几种系统?
    TimLang
        5
    TimLang  
       2018-11-13 15:17:36 +08:00
    正在搞 tengine 的 init.d 脚本就刷到这篇帖子。。
    ffeii
        6
    ffeii  
       2018-11-13 15:19:33 +08:00 via iPhone
    systemd
    Livid
        7
    Livid  
    MOD
    OP
       2018-11-13 15:20:13 +08:00   ❤️ 2
    @shallyy 我家里有超过 10 台电脑,基本上主流的系统都覆盖了。

    V2EX 的开发环境我在各种系统上都搭建过,Windows / Ubuntu / macOS ……
    reticentfat
        8
    reticentfat  
       2018-11-13 15:42:17 +08:00
    膜拜大佬,我还以为是生产环境,原来是家里
    lfzyx
        9
    lfzyx  
       2018-11-13 15:46:44 +08:00
    systemd
    chinvo
        10
    chinvo  
       2018-11-13 15:47:02 +08:00 via iPhone
    systemd,自带 watchman、资源限制等小玩意儿
    julyclyde
        11
    julyclyde  
       2018-11-13 15:52:43 +08:00
    @TimLang tengine 的你直接抄 nginx 的不就得了?
    xuboying
        12
    xuboying  
       2018-11-13 15:52:48 +08:00
    看到 18,我还以为 16 的 systemd 过时了,已经要讨论 docker 概念了, 结果看到 sysV...

    个人觉得 systemd 挺好的,写个 unit 配置就能用了。init.d 里要熟悉 shell 脚本。(变相的降低了用户的入门水平)
    另外,sysV 其实只能启动单一服务,多服务管理还是非常难写的。这点 systemd 解决了

    PS 同求"最好"的方式
    Cbdy
        13
    Cbdy  
       2018-11-13 15:55:00 +08:00
    这种场景正好用 pm2
    https://pm2.io/doc/en/runtime/guide/process-management/#manage-any-application-type
    脚本前台启动,作为 pm2 的一个 app 启动
    pm2 的 daemon 进程用 systemd 管理( pm2 startup 一下即可)
    est
        14
    est  
       2018-11-13 15:57:38 +08:00   ❤️ 1
    systemd


    那些说 docker pm2 的。。你们想没想过 dockerd 和 node 是怎么启动的。。。。。

    为啥要舍弃原生的去用二手的?况且原生自带的功能也不弱。
    liuxu
        15
    liuxu  
       2018-11-13 15:58:48 +08:00
    果断 systemd,不过一些小程序我还是 rc.local
    tmly200
        16
    tmly200  
       2018-11-13 15:59:55 +08:00
    service?
    flowfire
        17
    flowfire  
       2018-11-13 16:01:37 +08:00
    我怎么记得可以在 crontab 里写启动脚本。。。
    boris1993
        18
    boris1993  
       2018-11-13 16:11:59 +08:00 via Android
    感觉 systemd 就足够用了
    Hardrain
        19
    Hardrain  
       2018-11-13 16:23:03 +08:00
    systemd unit
    luozic
        20
    luozic  
       2018-11-13 16:30:17 +08:00
    Supervisord 进程守护
    ech0x
        21
    ech0x  
       2018-11-13 16:32:35 +08:00
    systemd 吧......
    ray1888
        22
    ray1888  
       2018-11-13 16:36:26 +08:00
    systemd 吧, 比写 system v 一堆不知道什么的东西简单多多了
    Tink
        23
    Tink  
       2018-11-13 16:39:02 +08:00
    supervisord 够用
    zhouyut001
        24
    zhouyut001  
       2018-11-13 16:49:19 +08:00
    十几台电脑,第一印象是开网吧的
    liangzi
        25
    liangzi  
       2018-11-13 16:56:07 +08:00
    个人用户 觉得 systemd 现在是主流了吧 可以控制的方面多 当然需要掌握的知识也随之增多
    平时自己都是 crontab+anacrontab 启动各种备份(个人需求没有多少)
    有必要的话就 systemd 启动一个脚本(PS:openSUSE 自带个 after-local.service 静态的 默认添加个 after-local 就开机自动启动了)
    xuboying
        26
    xuboying  
       2018-11-13 17:59:59 +08:00
    @est #14 每一次技术变更都会有抵触到没办法只能接受,sysV 到 systemd 就是一次,到 docker 也是这样,普通用户也只能被动接受。也许过几年就是满大街 docker 了。我刚刚学会 systemd 部署就有外地同事强推 docker,公司层面也支持他们,用 systemd 的只能再学一遍。
    est
        27
    est  
       2018-11-13 18:01:11 +08:00
    @xuboying docker 就是个渣。container 内部 pid1 问题拖了许久也才解决。
    shyling
        28
    shyling  
       2018-11-13 18:02:11 +08:00
    想稳定跑的用 systemd,毕竟要写配置文件,systemctl daemon-reload 也略麻烦点。

    跑跑测试测试的用 pm2,比较无脑

    docker 是另外的需求。。
    zqguo
        29
    zqguo  
       2018-11-13 18:06:35 +08:00
    docker 也可以的
    iwtbauh
        30
    iwtbauh  
       2018-11-13 18:08:33 +08:00 via Android
    必须是 LSB service 啊

    http://refspecs.linuxfoundation.org/LSB_3.1.0/LSB-Core-generic/LSB-Core-generic/tocsysinit.html

    建议不要被 systemd 这种东西套牢
    xuboying
        31
    xuboying  
       2018-11-13 18:14:55 +08:00
    @est #27 个人对 docker 还在一知半解状态,这个帖子也不讨论 docker 了,只是感觉 google 的野心很大,基于 docker 技术做了微服务框架,取代了过去的 go/erlang 模式。(变相降低各大互联网公司进场门槛),可以以后在 docker 的相关帖子里再聊。
    hujianxin
        32
    hujianxin  
       2018-11-13 18:42:42 +08:00   ❤️ 1
    我倒是建议 supervisor,已经经受历史考研了,而且还跨平台
    MeteorCat
        33
    MeteorCat  
       2018-11-13 18:44:33 +08:00 via Android
    systemctl unit +1
    TimePPT
        34
    TimePPT  
       2018-11-13 18:48:51 +08:00
    @hujianxin supervisor +1,用顺手了懒得换了。
    0312birdzhang
        35
    0312birdzhang  
       2018-11-13 19:42:07 +08:00
    systemd 最优选
    MonoLogueChi
        36
    MonoLogueChi  
       2018-11-13 19:55:06 +08:00 via Android
    supervisor
    qgy18
        37
    qgy18  
       2018-11-13 19:59:59 +08:00
    flowfire
        38
    flowfire  
       2018-11-13 20:06:44 +08:00 via iPhone
    @qgy18 #37 是的
    est
        39
    est  
       2018-11-14 10:13:24 +08:00
    @xuboying google 野心大跟 docker 什么关系。。。。你懂得多你说说呗。
    julyclyde
        40
    julyclyde  
       2018-11-14 11:55:29 +08:00
    除了 init/systemd 以外,其它都不能保证它自己持续运行,从而也就没办法保证它自己能够实施“保护好下属服务”的职责

    唯有 PID=1 的进程受内核的特殊关照
    py2ex
        41
    py2ex  
       2018-11-14 12:11:06 +08:00
    systemd 是官方推荐
    TimLang
        42
    TimLang  
       2018-11-14 12:12:23 +08:00
    systemd 太过复杂,对非专业运维来说有比较大的学习成本。

    init.d 的脚本我一直不知道如何以非 root 用户来开机启动,所以我一直用 crontab 的 @reboot 来做的 @flowfire
    ddzzhen
        43
    ddzzhen  
       2018-11-14 14:03:31 +08:00
    systemd 好用,如果服务容易出问题,可以使用 supervisor
    realpg
        44
    realpg  
       2018-11-14 14:23:59 +08:00
    systemd service 是暂时的唯一选择吧
    如果不善于书写 systemd service,也可以考虑 supervisord
    realpg
        45
    realpg  
       2018-11-14 14:25:06 +08:00
    @livid
    PS 习惯性手残多加了个 d
    iceheart
        46
    iceheart  
       2018-11-19 18:43:38 +08:00 via Android
    能用就行,这种轮子重新造有啥意义?我是看不出。
    waterlaw
        47
    waterlaw  
       2018-11-26 15:59:10 +08:00
    今天试了下公司服务器, 用 systemd service 关不掉服务, 后面才发现服务器使用 systemctl 管理服务。服务器 Ubuntu 18.04
    waterlaw
        48
    waterlaw  
       2018-11-26 16:28:56 +08:00
    写错了前面用 serevice postgresql stop 停不掉服务, 啊,Systemd == systemctl
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1192 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 18:05 · PVG 02:05 · LAX 10:05 · JFK 13:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.