首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
V2EX  ›  问与答

Linux 为什么要使用 systemd 啊

  •  
  •   jiafaner · 57 天前 · 3102 次点击
    这是一个创建于 57 天前的主题,其中的信息可能已经有所发展或是发生改变。
    linux 为什么要使用 systemd 啊

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

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

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

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

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

    感谢

    没有任何报错

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

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

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

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

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

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

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

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


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

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

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

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

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