在 Ubuntu 18.04 里,为一个服务写启动脚本的最好的方式是? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Livid
179.91D
584.36D
V2EX    Ubuntu

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

  •  
  •   Livid
    PRO
    2018-11-13 15:14:44 +08:00 8341 次点击
    这是一个创建于 2576 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有一些用了好多年的 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
    PRO
       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  
    PRO
       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  
    PRO
       2018-11-13 18:48:51 +08:00
    @hujianxin supervisor +1,用顺手了懒得换了。
    1daydayde
        35
    1daydayde  
       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  
    PRO
       2018-11-14 14:23:59 +08:00
    systemd service 是暂时的唯一选择吧
    如果不善于书写 systemd service,也可以考虑 supervisord
    realpg
        45
    realpg  
    PRO
       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     Solana     3073 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 43ms UTC 12:53 PVG 20:53 LAX 04:53 JFK 07:53
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86