要在后台执行Shell脚本并设置它开机自启,你需要执行两个步骤:
后台执行Shell脚本
要将Shell脚本在后台执行,你可以使用nohup
命令来忽略挂起(SIGHUP)信号,这样即使你关闭了终端,脚本也会继续运行。同时,使用&
将命令放到后台执行。
nohup /path/to/your/script.sh &
这将会启动脚本,并且即使你关闭了终端,脚本也会继续运行。nohup
命令会将输出重定向到一个名为nohup.out
的文件中,除非你指定了其他的输出文件。
设置脚本开机自启
要设置脚本开机自启,你可以使用systemd
、cron
的@reboot
选项或者/etc/rc.local
(对于某些系统)。下面我将介绍使用systemd
的方法,因为它更加现代和灵活。
首先,你需要创建一个systemd
服务单元文件来描述你的脚本。创建一个新的服务单元文件,例如/etc/systemd/system/your-script.service
,并添加以下内容:
[Unit]
Description=My custom startup script
After=network.target
[Service]
Type=simple
ExecStart=/path/to/your/script.sh
Restart=on-failure
User=your-username
Group=your-groupname
[Install]
WantedBy=multi-user.target
确保替换Description
、ExecStart
、User
和Group
为你自己的脚本描述、脚本路径、运行脚本的用户名和组名。
然后,重新加载systemd
守护进程并启用你的服务:
sudo systemctl daemon-reload
sudo systemctl enable your-script.service
现在,你的脚本将会在系统启动时自动运行。如果你想要立即启动服务而不是等待下次重启,可以运行:
sudo systemctl start your-script.service
如果你不想使用systemd
,你也可以使用cron
的@reboot
选项。只需编辑crontab
文件(使用crontab -e
命令),然后添加以下行:
@reboot /path/to/your/script.sh
这将会在每次系统启动时运行你的脚本。但请注意,使用cron
的@reboot
选项时,脚本会在系统完成所有启动服务后执行,这可能会比使用systemd
的服务稍晚一些。
所以我们不建议用这种方案
使用/etc/rc.local
也是一种方法,但这种方法在一些现代的Linux发行版中已经不常用了,因为它不支持依赖管理和服务重启。如果你的系统上有/etc/rc.local
,你可以在文件末尾添加你的脚本路径,并确保文件具有执行权限。
请根据你的具体需求和系统环境选择最适合你的方法。