我是 systemd 的新手,想知道每次部署新版本时重新启动 Web 应用程序的最佳策略是什么。
目前,我在启动时启动我的服务,它只是待在那里,但我希望每当我更改文件时它都会自动重新启动,因为每当我在 gitlab 上推送到 master 时,运行器都会获取文件、编译并将其复制到正确的目录中。然后我想重新启动或关闭它,但我不知道如何操作,因为重新启动它需要 sudo。
这是我的服务文件
[Unit]
After=mongod.service
[Service]
WorkingDirectory=/var/app/mywebsite/Web
Environment="HOME=/home/stan"
Environment="DOTNET_CLI_TELEMETRY_OPTOUT=1"
Environment="DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1"
ExecStart=/usr/bin/dotnet run -c Release -p /var/app/mywebsite/Web/project.json
[Install]
WantedBy=multi-user.target
以下是我的 ci 文件
before_script:
- set DOTNET_CLI_TELEMETRY_OPTOUT=1
- set DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
- set HOME=/home/stan
- cd Web
- dotnet restore
- dotnet build -c Release
- cd ..
copy:
script:
- cp -R ./* /var/app/mywebsite/ # After this I would like to restart the website service
答案1
如果您想要重新加载 systemd,扫描新的或更改的单元,然后添加:
sudo systemctl daemon-reload
答案2
- 打开
sudo visudo
- 添加
gitlab-runner ALL=(ALL) NOPASSWD: /bin/systemctl restart myapp
- 现在你可以这样做
sudo /bin/systemctl restart myapp
,它不会提示输入密码