add_service: 便捷添加 systemd 开机自启启动项的 CLI 工具 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
diyer22
V2EX    Linux

add_service: 便捷添加 systemd 开机自启启动项的 CLI 工具

  •  
  •   diyer22 2023-08-18 01:15:27 +08:00 1665 次点击
    这是一个创建于 787 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在 Linux 系统中, 配置 systemd service 实现开机自启的过程复杂且繁琐。为了方便,我写了一个用于管理开机启动项的 CLI 小工具 add_service

    https://github.com/DIYer22/add_service

    它仅需一行命令,即可便捷添加 systemd 启动项,无需手动编写配置文件。

    安装:

    pip3 install add_service 

    使用方法:

    add_service xxx.sh/cmd [--user root(默认为 `whoami`)] [--name service_name] [--start] 

    可选参数:

    -h, --help 显示此帮助信息并退出
    -l, --ls 列出所有由 add_service 创建的服务
    --rm NAME 删除由 add_service 创建的服务
    --user USER 执行脚本的用户,默认为 whoami
    --name NAME 服务名称,默认为 add_service0.service
    --start 立即启动服务

    示例:

    把当前文件夹开一个 http 服务器并暴露到 80 端口:

    add_service "`which python3` -m http.server 80" --user root --name http_server 

    python -m 调用方式来开机自动运行 ssh_nat.sh 文件(执行用户是当前用户):

    python -m add_service ssh_nat.sh # 默认服务名称为 ssh_nat.service 

    欢迎 V 友们使用和提意见!

    11 条回复    2023-08-24 05:21:07 +08:00
    ExplodingDragon
        1
    ExplodingDragon  
       2023-08-18 08:45:15 +08:00
    支持 「 Systemd User Services 」吗?

    https://wiki.archlinux.org/title/systemd/User
    cheng6563
        2
    cheng6563  
       2023-08-18 09:29:43 +08:00
    我还是倾向于写配置文件,直接用命令注册服务,万一命令打错了,之前命令怎么写的都不知道。
    diyer22
        3
    diyer22  
    OP
       2023-08-18 11:41:36 +08:00
    @ExplodingFKL 目前不支持, 感受了一下 systemd/User, 没有太明白其应用场景; add_service 主要的目的是便捷地添加 systemd 开机自启启动项, 所以不宜变得复杂, 保持简洁为好.
    diyer22
        4
    diyer22  
    OP
       2023-08-18 11:53:06 +08:00
    @cheng6563 哈哈哈, 命令打错这种事情太常见了. 所以开发的时候也考虑了这方面. add_service 纯粹就是自动化地按照人们的预期创建 service 文件和执行 systemctl 命令.
    且为了透明性, add_service 会在 terminal 上 log 出它要做的全部操作(可以在项目主页看到详细 log). 做错了很方便根据 log 删除对应的文件, 也可以一行删除 `add_service --rm service_name`.
    julyclyde
        5
    julyclyde  
       2023-08-18 12:35:40 +08:00
    这种需求太低频,且太个性化
    做个工具的用处不大
    diyer22
        6
    diyer22  
    OP
       2023-08-18 14:21:36 +08:00
    @julyclyde 的确很低频. 但一个是 systemd 太复杂, 繁琐了, 二是我工作上经常要配置新电脑, 用到的频率偏高一些. 所以就写了这个工具, 希望对有类似需求的人有用吧.
    skyrim61
        7
    skyrim61  
       2023-08-18 17:53:04 +08:00
    便捷添加 systemd 启动项 和写 配置文件 有啥区别? 我从来没听过还有这种方式
    diyer22
        8
    diyer22  
    OP
       2023-08-18 23:30:50 +08:00
    @skyrim61 没有区别。 只是配置 service 来写启动项太繁琐了, 需要创建文件,修改 n 个配置参数,然后至少两个 systemctl 命令才能完成, 而且配置文件很多小细节没做好就得 debug+重新修改。

    所以我开发了小工具 add_service , 一行命令就可以无脑完成 service + 设置启动项,非常方便。
    julyclyde
        9
    julyclyde  
       2023-08-19 18:12:18 +08:00
    @diyer22 你这工具能一次性写好细节避免修改?
    diyer22
        10
    diyer22  
    OP
       2023-08-19 21:33:40 +08:00
    @julyclyde add_service 在 shell 命令和 service 文件要求的细节对齐上, 做了很多工作(if else + assert). 能避免绝大多数问题, 我知道的坑都有单独代码处理.
    其可以支持开机自启运行 二进制/shell/Python/JS/TS 等脚本. 最关键的是有一个克隆环境变量的功能(--clone-envs), 能做到和当前 shell 一致的运行环境, 避免了很多环境变量不同的坑.
    yanqiyu
        11
    yanqiyu  
       2023-08-24 05:21:07 +08:00
    其实我一直用的土办法:
    先 systemd-run 把东西跑起来,然后修改产生的 transient unit file 作为 unit file
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1339 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 17:07 PVG 01:07 LAX 10:07 JFK 13:07
    Do have faith in what you're doing.
    ubao 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