You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过systemd服务文件执行./start start命令

如何通过systemd服务文件执行./start start命令

嘿,我来帮你搞定这个问题!首先你得明白,StandardInput=这个选项是用来给服务提供标准输入的(比如从文件读取输入内容),和你要运行带参数的脚本完全不搭边,难怪它没起作用。咱们一步步来解决:

  • 确保你的start脚本有可执行权限
    系统要能运行这个脚本,必须给它加上执行权限,执行这条命令:

    chmod +x /home/host/Server/start
    
  • 检查脚本开头的shebang
    你的start脚本最顶部必须有一行指定解释器的代码,比如用bash的话就是:

    #!/bin/bash
    

    如果没写这行,systemd可能不知道用什么程序来解析你的脚本,自然会运行失败。

修正后的systemd服务文件

你原来的服务文件框架是对的,只要确保上面两个点没问题,再给服务起个明确的名称(比如叫my-server.service),修改后的完整内容如下:

[Unit]
Description=My Server Service
Wants=network-online.target
After=syslog.target network.target nss-lookup.target network-online.target

[Service]
User=host
WorkingDirectory=/home/host/Server/
ExecStart=/home/host/Server/start start
Restart=always
RestartSec=30

[Install]
WantedBy=multi-user.target

这里ExecStart的写法完全正确:用绝对路径指向脚本,后面跟参数start,和你手动运行./start start的效果完全一致。

测试服务是否正常运行

做完上面的修改后,执行以下命令让systemd加载新配置并启动服务:

# 重新加载systemd配置
sudo systemctl daemon-reload
# 启用并立即启动服务
sudo systemctl enable --now my-server.service
# 查看服务状态
sudo systemctl status my-server.service

如果还是有问题,可以查看实时日志来排查错误:

journalctl -u my-server.service -f

这个命令会实时输出服务的日志信息,帮你定位具体的故障点。

备注:内容来源于stack exchange,提问作者Lex King

火山引擎 最新活动