祈灵工具箱

🐧systemd service / timer 生成器 - cron 转 OnCalendar、单元文件检查

想让程序在 Linux 上开机自启、崩溃自动重启、或者用 systemd timer 替代 crontab?这个工具用表单生成可以直接放进 /etc/systemd/system 的单元文件。.service 部分包括描述、启动类型(simple、exec、forking、oneshot、notify、idle)、ExecStart / ExecStartPre / ExecReload / ExecStop、运行用户与组或 DynamicUser、工作目录、环境变量(含空格自动加引号)与 EnvironmentFile、Restart 策略与 RestartSec、启动频率限制、After / Wants / Requires 依赖和 WantedBy、日志输出、文件句柄与内存 CPU 限制,以及一组安全加固选项(NoNewPrivileges、ProtectSystem、ProtectHome、PrivateTmp、PrivateDevices、内核保护、RestrictSUIDSGID、MemoryDenyWriteExecute、SystemCallFilter、允许非 root 监听 80 端口等),每项都附中文说明注释。.timer 部分可以直接写 OnCalendar 表达式、把 cron 表达式转换过来(日和星期同时指定时自动拆成两条,因为两者语义不同),或者按“每隔 N 分钟 / 小时”生成单调定时器,并实时显示规范化形式和接下来几次的触发时间;还支持 Persistent 补跑、随机延迟、精度和唤醒。第三个标签页可以粘贴现有的单元文件,逐行解释每条指令,并检查节名错误、布尔值和时长格式、相对路径命令、管道重定向、Environment 引号、缺少 ExecStart、oneshot 与 Restart 冲突、network-online.target 用法、缺少 [Install] 等常见问题。最后附上 daemon-reload、enable --now、查看日志的命令(也支持 systemctl --user 用户级服务)。

免费 · 无需注册 · 浏览器本地处理最后更新:

正在加载工具...

如何使用systemd 服务生成器

  1. 1在“.service 生成”里填写单元名、启动命令、运行用户、重启策略,按需勾选安全加固项
  2. 2需要定时运行时切到“.timer 定时器”,输入 OnCalendar、cron 表达式或间隔,查看下次运行时间
  3. 3下载 .service / .timer 文件,按页面给出的命令复制到服务器并 systemctl enable --now

常见问题

生成的文件放在哪里?怎么启用?
系统服务放在 /etc/systemd/system/,然后执行 sudo systemctl daemon-reload 重新加载,再执行 sudo systemctl enable --now 名称.service 设为开机启动并立即启动。用 systemctl status 名称 查看状态,journalctl -u 名称 -f 跟踪日志。用户级服务放在 ~/.config/systemd/user/,命令都加 --user,并执行 loginctl enable-linger 让它在退出登录后继续运行。
cron 表达式怎么对应 OnCalendar?
cron 的“分 时 日 月 周”对应 OnCalendar 的“周 年-月-日 时:分:秒”,例如 0 9 * * 1-5 对应 Mon..Fri *-*-* 09:00:00,*/15 * * * * 对应 *:0/15。区别在于 cron 同时指定日和星期时表示“任一满足”,systemd 表示“同时满足”,工具会拆成两条 OnCalendar。时间按服务器本地时区计算,也可以在末尾加 UTC。
timer 比 crontab 好在哪里?
每次运行都有独立的日志(journalctl -u 服务名),可以用 systemctl list-timers 查看下次运行时间;Persistent=true 能在关机错过后开机补跑;RandomizedDelaySec 避免多台机器同时运行;任务本身是普通 service,可以复用依赖、资源限制和安全加固设置,也不会因为上次还没跑完而重叠运行。
安全加固选项会不会让程序跑不起来?
可能会,所以默认只开启几乎不影响程序的 NoNewPrivileges、PrivateTmp、ProtectSystem=full、ProtectHome。ProtectSystem=strict 需要用 ReadWritePaths 放行要写的目录;MemoryDenyWriteExecute 会破坏 Node.js、Java 等 JIT;RestrictNamespaces 不适合容器类程序。启用后可用 systemd-analyze security 名称.service 查看评分并逐项测试。