给自己的小服务写个 systemd 单元:开机自启与日志查看

举报
yd_291459017 发表于 2026/11/05 11:44:52 2026/11/05
【摘要】 自己在服务器上跑一个小服务,最怕的不是写不出来,而是机器一重启、终端一关,服务就没了,还得手动再起一次。systemd 解决的正是这个问题:把服务写成一个单元交给系统管,开机自动起、挂了按策略处理、日志也有地方集中看。先理解一个关系:systemd 单元不是脚本本身,而是告诉系统怎么起这个服务的说明书。服务程序还是你原来的那个,单元里写清用什么用户跑、从哪个目录起、命令是什么、失败了怎么办。...

自己在服务器上跑一个小服务,最怕的不是写不出来,而是机器一重启、终端一关,服务就没了,还得手动再起一次。systemd 解决的正是这个问题:把服务写成一个单元交给系统管,开机自动起、挂了按策略处理、日志也有地方集中看。

先理解一个关系:systemd 单元不是脚本本身,而是告诉系统怎么起这个服务的说明书。服务程序还是你原来的那个,单元里写清用什么用户跑、从哪个目录起、命令是什么、失败了怎么办。系统按这份说明书起服务,你就不用每次都守着终端了。

上手只要三步。第一步,在 /etc/systemd/system/ 下新建一个单元文件,比如 myapp.service,名字用英文和项目名,不要用中文和空格。文件里最关键的三段是:[Unit] 写描述和启动顺序,[Service] 写工作目录、启动命令和重启策略,[Install] 写开机自启的目标。第二步,执行 systemctl daemon-reload 让系统重新读一遍单元,再用 systemctl enable myapp 设为开机自启,用 systemctl start myapp 立刻起一次。第三步,用 systemctl status myapp 看它是不是在跑,用 journalctl -u myapp -f 实时看日志,用 journalctl -u myapp --since today 只看今天的日志。

新手最容易踩的坑有三个。第一,启动命令里不要写相对路径,工作目录和可执行文件都要写绝对路径,否则手动能跑、systemd 起就找不到文件。第二,重启策略不要一上来就写无条件一直重启,先用 on-failure,等服务本身稳定了再考虑放宽,不然一个本身就起不来的服务会在后台反复刷日志。第三,服务跑起来不代表日志就不用管,程序自己的输出要往标准输出写,这样 journalctl 才能集中收到;如果程序把日志写到各处文件里,查问题时还得满盘找。

养成一个习惯就够了:一个服务一个单元,名字写清项目,改完单元先 daemon-reload 再重启服务,出问题先看 status 再看 journalctl。这样下次机器重启,你就不用重新手动起服务,只需要确认它已经自己起来了。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。