CentOS7下Jekyll服务启动失败求助(附systemd错误日志)
解决Jekyll systemd服务启动失败的问题
我是一名Web开发爱好者,最近在CentOS 7服务器上手搭Jekyll——为了熟悉基础配置,特意没用到反向代理,还跟着旧指南调整了RVM相关的命令,甚至把Ruby版本从2.3.3换成了2.4.1,但写完systemd服务文件后,服务始终启动不了。我完全没写systemd配置的经验,附上报错日志:
May 13 12:37:46 li1018-116.members.linode.com systemd[1]: [/etc/systemd/system/jekyll.service:23] Invalid section header '[Install] WantedBy=multi-user.target' May 13 12:37:50 li1018-116.members.linode.com systemd[1]: [/etc/systemd/system/jekyll.service:7] Failed to add dependency on network.target[Service], ignoring: Invalid argument May 13 12:37:50 li1018-116.members.linode.com systemd[1]: [/etc/systemd/system/jekyll.service:9] Unknown lvalue 'User' in section 'Unit' May 13 12:37:50 li1018-116.members.linode.com systemd[1]: [/etc/systemd/system/jekyll.service:11] Unknown lvalue 'Type' in section 'Unit' May 13 12:37:50 li1018-116.members.linode.com systemd[1]: [/etc/systemd/system/jekyll.service:13] Unknown lvalue 'ExecStart' in section 'Unit' May 13 12:37:50 li1018-116.members.linode.com systemd[1]: [/etc/systemd/system/jekyll.service:15] Unknown lvalue 'Restart' in section 'Unit' May 13 12:37:50 li1018-116.members.linode.com systemd[1]: [/etc/systemd/system/jekyll.service:17] Unknown lvalue 'StandardOutput' in section 'Unit' May 13 12:37:50 li1018-116.members.linode.com systemd[1]: [/etc/systemd/system/jekyll.service:19] Unknown lvalue 'StandardError' in section 'Unit' May 13 12:37:50 li1018-116.members.linode.com systemd[1]: [/etc/systemd/system/jekyll.service:21] Unknown lvalue 'SyslogIdentifier' in section 'Unit' May 13 12:37:50 li1018-116.members.linode.com systemd[1]: [/etc/systemd/system/jekyll.service:23] Invalid section header '[Install] WantedBy=multi-user.target'
错误原因分析
从日志里的报错能看出,问题全出在systemd配置文件的结构和语法错误上:
- 配置项放错了Section:
User、Type、ExecStart这些都是属于[Service]段的配置,你把它们写到[Unit]段里了,systemd找不到对应的配置上下文,就会报Unknown lvalue错误。 - Install段语法错误:
[Install] WantedBy=multi-user.target是错误写法——WantedBy必须单独占一行,不能跟在Section标题后面。 - 依赖配置语法错误:
network.target[Service]这种写法不对,依赖只需要写目标单元名称,比如network.target即可。
正确的systemd服务配置文件
根据你的场景,我整理了一份正确的模板,你只需要替换成自己的信息即可:
[Unit] Description=Jekyll Personal Blog Service After=network.target [Service] # 替换成你运行Jekyll的用户名,不要用root User=your_username # 简单服务类型,适合持续运行的进程 Type=simple # 注意:必须用RVM wrapper的绝对路径,因为systemd不会加载用户的RVM环境 # 你可以用命令找到路径:which jekyll ExecStart=/usr/local/rvm/gems/ruby-2.4.1/wrappers/jekyll serve --host 0.0.0.0 --port 4000 --source /path/to/your/jekyll/site # 服务崩溃时自动重启 Restart=always # 把输出重定向到syslog StandardOutput=syslog StandardError=syslog # 日志标识,方便查看 SyslogIdentifier=jekyll-blog [Install] # 设置开机自启的目标 WantedBy=multi-user.target
修复步骤
- 把上面的配置文件内容替换成你自己的信息:
your_username:替换成你的服务器用户名ExecStart里的Ruby路径、Jekyll站点路径要和实际一致
- 将配置文件保存到
/etc/systemd/system/jekyll.service - 重新加载systemd配置,让新文件生效:
sudo systemctl daemon-reload - 尝试启动服务:
sudo systemctl start jekyll - 查看服务状态,确认是否启动成功:
如果还有问题,可以查看实时日志排查:sudo systemctl status jekylljournalctl -u jekyll -f
额外注意事项
- 确保你在Ruby 2.4.1环境下已经正确安装了Jekyll,你可以用下面的命令测试:
/usr/local/rvm/gems/ruby-2.4.1/wrappers/jekyll -v - 确保Jekyll站点目录对指定的用户有读写权限
- 如果你不是用RVM管理Ruby,直接替换
ExecStart里的Jekyll路径为你实际的which jekyll结果即可
内容的提问来源于stack exchange,提问作者Evin Pasqualetti
相关产品推荐
相关产品推荐

