如何在启动时以 root 权限启动 Mono 应用程序?

如何在启动时以 root 权限启动 Mono 应用程序?

最近我使用 Mono 编写了一个程序。该程序需要 root 权限,并且我希望它在启动时启动。

我有 Ubuntu 16.04。

我已经尝试使用“/etc/rc.local”(随后此链接

/etc/rc.local:

#!/bin/sh -e
sudo game_backup.sh "$@" &

exit 0

/usr/local/bin/game_backup.sh:

#!/bin/bash
cd /home/yahniukov/Documents/programs/my_programs/game_backup
sudo mono ./backup.exe "$@"

rc.local 的权限

答案1

由于您正在运行默认使用的 Ubuntu 16.04,因此systemd您应该编写一个systemd服务单元来控制应用程序的启动行为。

一个简单的systemd单元文件如下所示,假设mono为,/usr/bin/mono因为该ExecStart行必须以绝对路径开头。
将其保存在 中/etc/systemd/system/my-mono-app.service

[Unit]
Description=my mono app
# If the service relies on network uncomment the next line.
#After=network.target

[Service]
Type=Simple
ExecStart=/usr/bin/mono /home/yahniukov/Documents/programs/my_programs/game_backup/backup.exe <your-parameters>

[Install]
WantedBy=multi-user.target

您添加了"$@",这意味着有一些参数传递给了您的命令,因此您必须将其替换<your-parameters>为实际使用的参数。
您还可以使用systemd选项EnvironmentEnvironmentFile来存储它。有关更多信息,请查看手册页systemd.unitsystemd.servicesystemd.exec

创建文件后,执行以下命令来告知systemd发生了更改。

systemctl daemon-reload

现在您应该能够按如下方式控制该服务。有关完整说明,请参阅man systemctl

systemctl status my-mono-app
systemctl start my-mono-app
systemctl stop my-mono-app
systemctl restart my-mono-app

要启用该服务作为启动服务,您必须输入以下命令。

systemctl enable my-mono-app

根据脚本和应用程序的行为,可能需要将部分更改Type=simpleoneshotforking。这并不意味着您必须systemctl daemon-reload在对文件进行更改后运行my-mono-app.service才能获取更改。

相关内容