我尝试start.sh
在服务器启动时启动一个文件。
一些信息:
- 这是一个无头虚拟服务器
- 我尝试过
crontab
,但也没用 - 我目前的方法是
systemctl
命令 - 当我登录时,用户是root
- 这是一个 Ubuntu 服务器
我的文件内容systemctl
:
[Unit]
Description=MCServer Start
After=multi-user.target
[Service]
Type=simple
ExecStart=/home/mcs/start.sh
[Install]
WantedBy=multi-user.target
内容start.sh
:
screen -S minecraft java -Xms1024M -Xmx1024M -jar /home/mcs/server.jar
当我重新启动后检查状态时,系统回复如下:
● mcs.service - MCServer Start
Loaded: loaded (/etc/systemd/system/mcs.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Wed 2021-06-30 12:12:16 CEST; 32min ago
Process: 700 ExecStart=/home/mcs/start.sh (code=exited, status=203/EXEC)
Main PID: 700 (code=exited, status=203/EXEC)
Jun 30 12:12:16 v25431 systemd[1]: Started MCServer Start.
Jun 30 12:12:16 v25431 systemd[700]: mcs.service: Failed to execute command: Permission denied
Jun 30 12:12:16 v25431 systemd[700]: mcs.service: Failed at step EXEC spawning /home/mcs/start.sh: Permission denied
Jun 30 12:12:16 v25431 systemd[1]: mcs.service: Main process exited, code=exited, status=203/EXEC
Jun 30 12:12:16 v25431 systemd[1]: mcs.service: Failed with result 'exit-code'.
root@v25431:~#
我发现我缺少许可...我该如何解决这个问题?
请注意...我对 Linux 还很陌生,所以请像我 5 岁或 80 岁一样向我解释一下 ^^
编辑:
当我将systemctl
其更改为:
[Unit]
Description=MCServer Start
After=multi-user.target
[Service]
Type=simple
ExecStart=sh /home/mcs/start.sh
[Install]
WantedBy=multi-user.target
输出更改为
● mcs.service - MCServer Start
Loaded: loaded (/etc/systemd/system/mcs.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Wed 2021-06-30 12:59:08 CEST; 22s ago
Process: 1324 ExecStart=/usr/bin/sh /home/mcs/start.sh (code=exited, status=1/FAILURE)
Main PID: 1324 (code=exited, status=1/FAILURE)
Jun 30 12:59:08 v25431 systemd[1]: Started MCServer Start.
Jun 30 12:59:08 v25431 sh[1325]: Must be connected to a terminal.
Jun 30 12:59:08 v25431 systemd[1]: mcs.service: Main process exited, code=exited, status=1/FAILURE
Jun 30 12:59:08 v25431 systemd[1]: mcs.service: Failed with result 'exit-code'.
请求的输出:
root@v25431:~# ls -l /home/mcs/start.sh
-rwxr-xr-x 1 root root 72 Jun 29 23:39 /home/mcs/start.sh
答案1
我不知道 systemctl,但 cron + Ubuntu 对我来说一直工作得很好。请尝试这个:
键入crontab -e
, or sudo crontab -e
(如果您的脚本应以超级用户身份运行)。然后您可能会被要求选择您喜欢的编辑器。选择nano
。然后附加以下行:
@reboot cd /home/mcs/ && bash start.sh
现在保存文件(控制键+哦, 然后y), 出口 (控制键+X)并重新启动。请报告这是否适合您。
(确保start.sh
通过运行chmod +x /home/mcs/start.sh
一次使脚本可执行。)
编辑:当然,首先请确保您的脚本在手动启动时按预期运行。然后才继续进行自动启动的操作。
答案2
好吧,如果有人遇到同样的问题,我找到了解决方案。
首先我遵循了这个指南:https://www.bennetrichter.de/anleitungen/minecraft-server-linux/非德国人使用谷歌翻译...
之后我将 start.sh 添加到 crontab ( crontab -e
) 中,如下所示:
@reboot /home/minecraft/start.sh
重启后,你可以查看屏幕screen -r
我不知道为什么它有效,但它确实有效