linux系统如何开机自动启动可执行文件,对于linux相关系统开机启动工作中我也遇到了相关问题,我是想将写的qt的c++程序进行开机启动可执行文件(其他的可执行文件也是同理),首先得保证用户模式可以运行可执行文件。
一,设置一个启动可执行文件的脚本,可以设置在自己熟悉的目录下。假设你有一个名为your_executable
的可执行文件,你想要通过一个名为start_executable.sh
的shell脚本来启动它。以下是start_executable.sh
脚本的内容:
#!/bin/bash
# 脚本名称:start_executable.sh
# 可执行文件的路径
EXECUTABLE_PATH="/path/to/your_executable"
# 检查可执行文件是否存在
if [ ! -f "$EXECUTABLE_PATH" ]; then
echo "错误:文件不存在 '$EXECUTABLE_PATH'"
exit 1
fi
# 检查可执行文件是否有执行权限
if [ ! -x "$EXECUTABLE_PATH" ]; then
echo "错误:文件没有执行权限 '$EXECUTABLE_PATH'"
exit 1
fi
# 启动可执行文件
echo "启动可执行文件:$EXECUTABLE_PATH"
"$EXECUTABLE_PATH"
确保将/path/to/your_executable
替换为你的可执行文件的实际路径。以下是如何使用这个脚本
- 保存上面的脚本到文件
start_executable.sh
。 - 给这个脚本文件执行权限。
chmod +x start_executable.sh
- 运行这个脚本。
./start_executable.sh
如果在你的用户命令行而非root用户命令行下成功启动,那么恭喜你完成了第一步。
二,使用systemd
服务(现代系统,如Ubuntu 16.04+、CentOS 7+)
因为网上的其他方法我都有尝试,都无法生效,目前我尝试是只有systemd这个有用。
1,创建一个新的服务单元文件,一般在/etc/systemd/system下面创建my_service.service,即一个属于你的service文件,下面的ExecStart=/path/to/your/script.sh路径注意换成你的第一步脚本文件的路径,目的是让系统开机即可读到你的.sh脚本文件
:
[Unit]
Description=My Service
After=network.target
[Service]
Type=simple
ExecStart=/path/to/your/script.sh
[Install]
WantedBy=multi-user.target
2,重新加载systemd
管理器配置:
sudo systemctl daemon-reload
3,启用服务以在启动时自动启动:
sudo systemctl enable my_service.service
此时设置好了,如果重启开机有用,那么恭喜你设置成功,否则可以进入目录进行命令行测试。
启动服务:
sudo systemctl start my_service.service
查看服务状态:
sudo systemctl status my_service.service
查看服务的日志:
journalctl -u my_service.service
停止服务:
sudo systemctl stop my_service.service
此时可以查看电脑的报错,如果发现有报错关于XDG_RUNTIME_DIR的问题,这个需要在上述脚本的前面加上一句,完整的如下所示:
#!/bin/bash
# 脚本名称:start_executable.sh
# XDG_RUNTIME_DIR环境
export XDG_RUNTIME_DIR=/run/user/$(id -u)
# 可执行文件的路径
EXECUTABLE_PATH="/path/to/your_executable"
# 检查可执行文件是否存在
if [ ! -f "$EXECUTABLE_PATH" ]; then
echo "错误:文件不存在 '$EXECUTABLE_PATH'"
exit 1
fi
# 检查可执行文件是否有执行权限
if [ ! -x "$EXECUTABLE_PATH" ]; then
echo "错误:文件没有执行权限 '$EXECUTABLE_PATH'"
exit 1
fi
# 启动可执行文件
echo "启动可执行文件:$EXECUTABLE_PATH"
"$EXECUTABLE_PATH"
如果这个.sh脚本还会报错,那么应该是环境的问题了,可以通过root用户和普通用户在可执行文件的目录下运行 your_executable,如果普通用户可以运行,root用户不能运行,基本上就是环境依赖的问题了,进入第三步。
3,将程序运行的依赖,比如动态链接库 .so
文件等放入根目录的/lib目录下,再通过命令行用root的用户运行可执行文件,如果成功运行,就代表脚本.sh文件和.service文件都可以生效,可以通过systemctl和开机重启进行测试。