![无法理解如何在系统启动时自动运行命令](https://linux22.com/image/1188590/%E6%97%A0%E6%B3%95%E7%90%86%E8%A7%A3%E5%A6%82%E4%BD%95%E5%9C%A8%E7%B3%BB%E7%BB%9F%E5%90%AF%E5%8A%A8%E6%97%B6%E8%87%AA%E5%8A%A8%E8%BF%90%E8%A1%8C%E5%91%BD%E4%BB%A4.png)
我一直在阅读有关如何在 Linux 上运行@startup 脚本的大多数顶级结果。
我一直在运行一个用于视频游戏的家庭服务器,我想自己创建一些东西。
不确定它叫什么。不过,我们将其称为脚本以供参考。
我希望能够创建一个脚本,可以在我的 Linux 服务器更新和/或重新启动时运行某些命令。
它似乎经常这样做(我认为这是件好事)
目前,我为一款名为 Terraria 的游戏创建了一个 config.txt 文件。此 txt 文件包含游戏开始时应使用的世界和游戏设置。它还设置了一条规则,即当无法找到所述世界时,将使用某些参数自动创建一个新世界。
- - 描述 - -
因此我使用以下命令创建了一个文件:
touch startup.sh
我已经在游戏文件所在的同一文件夹中创建了脚本
这是在 startup.sh 文件中写的内容:
#!/bin/sh
@reboot screen -S Terraria ./TerrariaServer.bin.x86_64 -config serverconfig.txt
当我删除@reboot时,我可以执行命令./startup.sh,它会打开一个名为Terraria的屏幕并使用其配置规则运行游戏。
我找不到一个简单的解释来说明如何在启动时运行命令
我非常确定这归结为正确的搜索,我相信我所寻找的任何地方都已经写在某处了。
答案1
#!/bin/bash
属于 bash 脚本。
@reboot
属于 crontab。
您可以尝试使用 crontab 看看它是否可以运行您想要的程序。
为了添加一个 cronjob,您需要运行crontab -e
然后将您的作业添加到文件末尾,您需要的行将如下所示;
@reboot screen -S Terraria /path/to/the/server/folder/TerrariaServer.bin.x86_64 -config serverconfig.txt
答案2
[Unit]
Description=Terraria Server
[Service]
Type=simple
WorkingDirectory=/home/terraria/
ExecStart=screen -S Terraria ./TerrariaServer.bin.x86_64 -config serverconfig.txt nogui
User=Terraria
Restart=on-failure
[Install]
WantedBy=multi-user.target
- 将 WorkingDirectory 更改为您想要的。我猜是
- 我从您的示例中使用的命令。
- 另存为
/etc/systemd/system/terraria.service
- 您可以向其中添加诸如套接字之类的东西,以便可以向服务发送命令。
控制:
sudo systemctl start|stop|restart terraria # Starts/stops/restarts
sudo systemctl status terraria # shows the status of the service
sudo journalctl -u terraria -f # shows the server log
您遇到问题的部分是:您在启动时启用或禁用服务......
sudo systemctl enable terraria.service
sudo systemctl disable terraria.service