我有一个在 Ubuntu 上运行的 Nodejs 脚本,它用作 HTTP 服务器(使用 Express),当对服务器进行特定 POST 时,它将尝试登录到 SVN 并svn info
使用以下代码执行命令:
svn_info = ["info", server, "--xml", "--non-interactive", "--username", svn_username, "--password", svn_password, "--no-auth-cache"];
output = spawnSync("svn", svn_info, { encoding: 'utf8' });
logger.debug(output.output);
这可以作为使用命令行的独立脚本完美运行。执行nodejs app.js
并发送适当的 POST,结果如下(路径名等已在此处手动替换为方括号中的“标签”):
<?xml version="1.0" encoding="UTF-8"?>
<info>
<entry path="my_path" revision="67368" kind="dir">
<url>https://[svn_server]/[root_path]/[relative_path]/my_path</url>
<relative-url>^/[relative_path]/my_path</relative-url>
<repository>
<root>https://[svn_server]/[root_path]</root>
<uuid>[UUID]</uuid>
</repository>
<commit revision="67334">
<author>author@domain</author>
<date>2019-02-07T15:33:15.806240Z</date>
</commit>
</entry>
</info>
我的 systemd 脚本test_server.service
调用 Nodejs 脚本,如下所示:
[Unit]
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=/usr/bin/nodejs /home/some_path/app.js
[Install]
WantedBy=multi-user.target
当脚本通过 boot 或service test_server start
命令启动并执行相同的 POST 命令时,我在日志文件中看到以下内容:
[2019-02-08T15:25:19.251Z] debug: ,<?xml version="1.0" encoding="UTF-8"?>
<info>
,svn: E170013: Unable to connect to a repository at URL 'https://[svn_server]/[root_path]/[relative_path]/my_path'
svn: E000111: Error running context: Connection refused
该脚本以 root 用户身份运行,无论是从 shell 还是由 systemd 启动时。我正在努力理解在 systemd 执行脚本时可能导致脚本失败的细微差别。