1.先创建一个新的startup.service文件
sudo touch startup.service
2.通过nano或者vim编辑内容
sudo nano startup.service
或者
sudo vim startup.service
3.编辑内容
[Unit]
Description=MainCmd Service
After=network.target
[Service]
Type=simple
ExecStart=/home/root/XXXX
Restart=on-failure
[Install]
WantedBy=multi-user.target
注:脚本注释
[Unit]
Description:描述了该服务的信息,即"MainCmd Service"。
After:指定了服务应该在哪些其他单元之后启动,这里是在网络(network.target)启动之后。
[Service]
Type:指定了服务的类型,这里是"simple",表示是一个简单的后台进程,同时也可以使用exec或者forking来代表前台运行。ExecStart:指定了服务启动时要执行的命令或程序的路径,这里是/home/root/XXXX。
Restart:指定了服务在失败时是否自动重启,这里是在发生故障时重新启动服务
[Install]
WantedBy:指定了服务应该安装到哪个目标中,这里是multi-user.target,表示在多用户模式下启动。
forking:适用于会以守护进程方式运行的程序。在程序启动时,系统会派生一个子进程,父进程会退出,子进程则继续在后台运行。
exec:适用于不会以守护进程方式运行的程序。在程序启动时,父进程会等待子进程执行完成,直到子进程退出之后才会返回。
4.移动到/etc/systemd/system/
5.启用该服务并设置开机自启动
sudo systemctl daemon-reload
sudo systemctl enable MainCmd.service
6.可以通过以下命令来检查服务的状态
sudo systemctl status startup.service
现在,重新启动系统,应该会自动启动程序了
附:
如果搞错了服务可以进行删除systemctl
1.停止服务:如果该服务正在运行,先停止它。使用以下命令停止服务:
sudo systemctl stop my.systemctl
2.禁用开机自启动:如果你希望在开机时不再自动启动该服务,可以禁用它。使用以下命令禁用开机自启动:
sudo systemctl disable my.systemctl
3.删除相关文件:删除与该服务相关的服务单元文件。使用以下命令删除服务单元文件:
sudo rm /etc/systemd/system/my.systemctl.service
4.重新加载systemctl配置:
sudo systemctl daemon-reload
如果你的程序没有GUI界面,是无法通过前台进行查看程序是否正在运行,可以通过:
ps -ef | grep xxxx
查找正在运行的与"XXXXX"相关的进程。
要进入这个线程并查看其输出,可以使用strace命令或者gdb调试来查看
使用strace命令来跟踪进程的系统调用和输出。执行以下命令:
sudo strace -p 进程号
使用gdb调试器进入进程并查看其输出。首先,安装gdb(如果尚未安装),然后执行以下命令:
sudo gdb -p 进程号