我创造了一个 systemd 目录中的服务文件 /lib/systemd/system/ 发射 nodejs 作为一种服务。问题是该文件包含硬编码的路径 nodej 在里面 ExecStart 现场。这意味着我随时更新 nodejs 我必须手动更改此服务文件。有办法使用吗 which node 下面文件中的命令是否自动设置路径?
systemd
/lib/systemd/system/
nodejs
nodej
ExecStart
which node
[Unit] Description=node-server-1 After=network.target [Service] Environment=NODE_PORT=3001 Type=simple User=manid ExecStart=/home/manidos/.nvm/versions/node/v14.15.1/bin/node /home/manidos/node-nginx/index.js Restart=on-failure [Install] WantedBy=multi-user.target
您可以在 ExecStart 线路:
ExecStart=/bin/bash -c '$$(/usr/bin/which node) /home/manidos/node-nginx/index.js'
基本上,这是在运行 which 在子shell中执行命令,并将其stdout传递给外部脚本运行。在systemd单元文件中使用此特定语法需要双倍美元,如 systemd.service manpage .
which