jiafaner
V2EX  ›  问与答

Linux 为什么要使用 systemd 啊

  •  
  •   jiafaner · Feb 27, 2019 · 6952 views
    This topic created in 2811 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
    miyuki
    Feb 27, 2019 via Android❤️2
    1
    KasuganoSoras
    KasuganoSoras
    Feb 27, 2019
    2
    把你的报错贴出来看看
    zhoulouzi
    zhoulouzi
    Feb 27, 2019❤️1
    3
    没必要问为什么用, 找资料学怎么用 会查报错就够了
    love4taylor
    love4taylor
    Feb 27, 2019
    4
    sudo systemctl status xxx.service -l 或 sudo journalctl -xe 把相关错误扔上来...
    另, 不是所有服务都可以直接一句 rc.local 搞定的.
    jiafaner
    jiafaner
    OP
    Feb 27, 2019
    5
    @zhoulouzi
    @KasuganoSoras
    @miyuki

    感谢

    没有任何报错

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

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

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

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

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

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

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

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


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

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

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

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

    实在快被这个东西搞死了
    CallMeReznov
    CallMeReznov
    Feb 27, 2019
    34
    其实很简单,LZ 搜索一下默认系统里有没有较晚启动的服务,然后在配置文件 Wants 填上,试验一下会不会正常即可
    我第一次搞也是莫名其妙的(其实现在也只是会找网上的抄下来罢了)
    mYYnSmiTEQWcCwAr
    mYYnSmiTEQWcCwAr
    Feb 27, 2019 via Android
    35
    我瞎猜一下 难道是\r\n 的换行方式问题?
    改成\n 换行试试
    zmz125000
    zmz125000
    Feb 27, 2019 via Android
    36
    不同用户环境变量的问题?
    izoabr
    izoabr
    Feb 27, 2019
    37
    我也觉得是,这东西太复杂了点,以前 init script 的时候很干净很清爽,自己很清楚都起了啥服务,都干啥用的,现在一堆服务都不知道啥玩意儿。
    但对桌面系统的话可能会比较好
    uyhyygyug1234
    uyhyygyug1234
    Feb 27, 2019
    38
    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
    q397064399
    Feb 28, 2019 via iPhone
    39
    supervisorctl 大部分人只是想要一个自动启动的守护进程罢了
    julyclyde
    julyclyde
    Feb 28, 2019
    40
    你不需要并不代表没人需要
    你可以坚持你自己的用法啊,也不是必须学 systemd
    huyudong1991
    huyudong1991
    Feb 28, 2019 via iPhone
    41
    加个 crond 进程检测
    ofblyt
    ofblyt
    Feb 28, 2019
    42
    systemd 实在是太好用了
    janxin
    janxin
    Feb 28, 2019
    43
    LZ 要么了解一下 rc.local 和 systemd 使用时候的区别?
    May725
    May725
    Feb 28, 2019
    44
    我倒觉得 systemd 挺明朗的, 以前的脚本需要注意的内容太多了。
    julyclyde
    julyclyde
    Mar 1, 2019
    45
    @May725 能意识到写 rc 脚本“需要注意太多”已经是高手了
    绝大多数人都是“随便写写”而已
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1598 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 75ms · UTC 09:25 · PVG 17:25 · LAX 01:25 · JFK 04:25
    ♥ Do have faith in what you're doing.