jiafaner
V2EX  ›  问与答

Linux 为什么要使用 systemd 啊

  •  
  •   jiafaner · Feb 27, 2019 · 6605 views
    This topic created in 2675 days ago, the information mentioned may be changed or developed.
    linux 为什么要使用 systemd 啊

    过去把脚本写到 rc.local 里面就行了

    现在都是什么啊,一两个服务,配置了一下午都没有弄起来,

    执行 systemctl start xxx.service 就能够运行

    可就是不能自动执行,即使我用过 systemctl enable xxx.service

    还有什么地方需要设置吗?
    45 replies    2019-03-01 08:27:19 +08:00
    miyuki
        1
    miyuki  
       Feb 27, 2019 via Android   ❤️ 2
    KasuganoSoras
        2
    KasuganoSoras  
       Feb 27, 2019
    把你的报错贴出来看看
    zhoulouzi
        3
    zhoulouzi  
       Feb 27, 2019   ❤️ 1
    没必要问为什么用, 找资料学怎么用 会查报错就够了
    love4taylor
        4
    love4taylor  
    PRO
       Feb 27, 2019
    sudo systemctl status xxx.service -l 或 sudo journalctl -xe 把相关错误扔上来...
    另, 不是所有服务都可以直接一句 rc.local 搞定的.
    jiafaner
        5
    jiafaner  
    OP
       Feb 27, 2019
    @zhoulouzi
    @KasuganoSoras
    @miyuki

    感谢

    没有任何报错

    我照着文档把所有能做的,都做了

    现在的情况是登录后直接用 systemctl start,服务就启来了

    可是,不手工执行却不能够自动启动

    实在不知道怎么整了
    aver4vex
        6
    aver4vex  
       Feb 27, 2019
    是不是你的这个服务需要别的服务依赖?
    AngryPanda
        7
    AngryPanda  
       Feb 27, 2019
    @jiafaner 是不是启动顺序的问题。依赖的服务没有启动?
    jiafaner
        8
    jiafaner  
    OP
       Feb 27, 2019
    @Love4Taylor 没有显示任何错误,我怀疑是不是要配置什么权重或者叫顺序,

    我们的 socket 服务需要提前能够解析 DNS 和连接网络,我抄的 apache 的.service 文件
    jiafaner
        9
    jiafaner  
    OP
       Feb 27, 2019
    @aver4vex
    @AngryPanda

    不熟悉依赖的服务是什么意思,查了文档说有依赖关系,我们的服务就是启动后去远程注册一下,然后就在本机接收 socket 请求,用 httpd 差不多的

    我写的.service 是抄的 httpd.service
    KasuganoSoras
        10
    KasuganoSoras  
       Feb 27, 2019
    @jiafaner #8 有些服务是需要依赖网络的,你可能需要设置它在 network 起来了以后才启动
    aver4vex
        11
    aver4vex  
       Feb 27, 2019
    @jiafaner 你最好抄 sshd 的。
    jiafaner
        12
    jiafaner  
    OP
       Feb 27, 2019
    @aver4vex
    @KasuganoSoras

    我抄一下 sshd 的试试
    mason961125
        13
    mason961125  
       Feb 27, 2019
    我觉得你用了 systemctl --user 然后还没有 loginctl enable-linger
    mason961125
        14
    mason961125  
       Feb 27, 2019
    顺带说一句,systemd 这种方便的依赖关系,你用 rc.local 实现起来难度要大的多。
    MeteorCat
        15
    MeteorCat  
       Feb 27, 2019 via Android
    你是不是启动脚本没给权限
    season4675
        16
    season4675  
       Feb 27, 2019
    因为 systemd 异步启动,启动速度更快啊。而且里面自带各种系统,用起来也方便~~~
    kkhu2004
        17
    kkhu2004  
       Feb 27, 2019
    如果急的话,可以先用这方法,每次启动会自动执行。
    corntab -e
    里面加上
    @reboot 你要运行的命令
    guokeke
        18
    guokeke  
       Feb 27, 2019 via Android
    当初改 systemd 社区一片骂声。
    SakuraKuma
        19
    SakuraKuma  
       Feb 27, 2019
    chkconfig on ???? 试试
    k9982874
        20
    k9982874  
       Feb 27, 2019
    @jiafaner #5 你这是明显没有让服务随系统启动。执行 systemctl enable xxx 试试
    这真不是 systemd 的锅
    k9982874
        21
    k9982874  
       Feb 27, 2019
    @k9982874 #20 楼主执行过了 systemctl enable,审题不严谨。。查服务日志吧
    hcymk2
        22
    hcymk2  
       Feb 27, 2019
    syste m d 有 debug 模式有日志的。
    dbw9580
        23
    dbw9580  
       Feb 27, 2019 via Android
    你得把你的配置文件贴出来啊,不然是要隔空猜吗?
    https://superuser.com/questions/955922/enabled-systemd-unit-does-not-start-at-boot
    ik0r
        24
    ik0r  
       Feb 27, 2019
    [Unit]
    Description=blablabla
    Requires=systemd-networkd.service
    After=network-online.target systemd-resolved.service
    Wants=network-online.target systemd-resolved.service
    ik0r
        25
    ik0r  
       Feb 27, 2019
    使用 systemd 挂载 smb 的时候遇到过, 需要 network OK 了才行
    biggray0312
        26
    biggray0312  
       Feb 27, 2019 via Android
    楼主你试试把配好的 systemd service 文件放到系统挂载点下的目录中, 比如 /etc/systemd/.../ 下,再去 enable,也许就好了。我过去的经验告诉我这个和 service 文件的位置是有关系的。
    Ansen
        27
    Ansen  
       Feb 27, 2019
    systemctl enable xxx
    mason961125
        28
    mason961125  
       Feb 27, 2019
    哦...想起来了,systemctl daemon-reload 了吗?
    reself
        29
    reself  
       Feb 27, 2019 via Android
    如果 start 能正常启动而 enable 不能正常自动启动的话,考虑是服务依赖的问题,调整一下服务依赖,按依赖顺序启动应该就没问题了
    kernel
        30
    kernel  
       Feb 27, 2019
    你要用回 rc.local 也是一句话的事儿
    hljjhb
        31
    hljjhb  
       Feb 27, 2019 via Android
    帖 service 内容有这么难么 让大家帮着一起猜(〜 ̄▽ ̄)〜
    tabris17
        32
    tabris17  
       Feb 27, 2019
    systemd 的确是好东西,启动脚本写起来太麻烦了
    jiafaner
        33
    jiafaner  
    OP
       Feb 27, 2019
    @tabris17
    @hljjhb
    @kernel
    @reself
    @Ansen
    @Jeremial
    @Jeremial
    @k9982874
    @kkhu2004
    @MeteorCat


    谢谢大家,我临时用了一个 cron 去启动,然后先解决了线上服务的问题。

    这时候,我用了我的虚拟机,也是 CentOS,用了一模一样的 systemd 的配置,居然能自动启动了

    我在线上机器上再试了,还是不行,我自己的 CentOS 里面却能用

    我再研究研究,看看是怎么回事

    实在快被这个东西搞死了
    CallMeReznov
        34
    CallMeReznov  
       Feb 27, 2019
    其实很简单,LZ 搜索一下默认系统里有没有较晚启动的服务,然后在配置文件 Wants 填上,试验一下会不会正常即可
    我第一次搞也是莫名其妙的(其实现在也只是会找网上的抄下来罢了)
    mYYnSmiTEQWcCwAr
        35
    mYYnSmiTEQWcCwAr  
       Feb 27, 2019 via Android
    我瞎猜一下 难道是\r\n 的换行方式问题?
    改成\n 换行试试
    zmz125000
        36
    zmz125000  
       Feb 27, 2019 via Android
    不同用户环境变量的问题?
    izoabr
        37
    izoabr  
       Feb 27, 2019
    我也觉得是,这东西太复杂了点,以前 init script 的时候很干净很清爽,自己很清楚都起了啥服务,都干啥用的,现在一堆服务都不知道啥玩意儿。
    但对桌面系统的话可能会比较好
    uyhyygyug1234
        38
    uyhyygyug1234  
       Feb 27, 2019
    centos 我之前记录了一个样例

    配置 Supervisor 开机启动:

    vi /usr/lib/systemd/system/supervisord.service

    [Unit]
    Description=Supervisor daemon

    [Service]
    Type=forking
    ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf
    ExecReload=/usr/bin/supervisorctl reload
    KillMode=process
    Restart=on-failure
    RestartSec=42s

    [Install]
    WantedBy=multi-user.target


    配置开机自启
    systemctl enable supervisord

    验证一下是否为开机启动:systemctl is-enabled supervisord
    q397064399
        39
    q397064399  
       Feb 28, 2019 via iPhone
    supervisorctl 大部分人只是想要一个自动启动的守护进程罢了
    julyclyde
        40
    julyclyde  
       Feb 28, 2019
    你不需要并不代表没人需要
    你可以坚持你自己的用法啊,也不是必须学 systemd
    huyudong1991
        41
    huyudong1991  
       Feb 28, 2019 via iPhone
    加个 crond 进程检测
    ofblyt
        42
    ofblyt  
       Feb 28, 2019
    systemd 实在是太好用了
    janxin
        43
    janxin  
       Feb 28, 2019
    LZ 要么了解一下 rc.local 和 systemd 使用时候的区别?
    May725
        44
    May725  
       Feb 28, 2019
    我倒觉得 systemd 挺明朗的, 以前的脚本需要注意的内容太多了。
    julyclyde
        45
    julyclyde  
       Mar 1, 2019
    @May725 能意识到写 rc 脚本“需要注意太多”已经是高手了
    绝大多数人都是“随便写写”而已
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5297 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 233ms · UTC 08:39 · PVG 16:39 · LAX 01:39 · JFK 04:39
    ♥ Do have faith in what you're doing.