因为要处理一个系统重启后的问题,而想到一个问题『死循环的脚本在开机启动的时候会导致机器卡在那里吗?』
以下是相关实验,记录一下!
一、 相关脚本
cat elisun.sh (该脚本运行10分钟)
#!/bin/bash for((i=1;i<=600;i++)) do DATE=`date "+%Y-%m-%d %H:%M:%S"` echo "$DATE $i" >> /tmp/haha.txt sleep 1 done
cat elisun1.sh(elisun2.sh,elisun3.sh改对应数字,此三个脚本均是死循环)
#!/bin/bash while true do DATE=`date "+%Y-%m-%d %H:%M:%S"` echo "$DATE haha1" >> /tmp/haha1.txt sleep 3 done
二、 实验场景
1. 将elisun1.sh、elisun2.sh、elisun3.sh三个死循环脚本写入到文件/etc/rc.d/rc.local里,重启机器。
结论:开机后的状况是只有elisun1.sh一直在执行死循环。
2. 将elisun.sh、elisun1.sh、elisun2.sh、elisun3.sh四个脚本写入到文件/etc/rc.d/rc.local里,重启机器。
结论:开机后elisun.sh起来,执行10分钟后elisun.sh退出,elisun1.sh启动。
3. 将elisun.sh写入系统服务,查看会不会卡住。
cat /usr/lib/systemd/system/elisun.service
[Unit] Description=elisun After=network.target [Service] Type=forking ExecStart=/data/shell/elisun.sh PrivateTmp=false [Install] WantedBy=multi-user.target
结论:开机启动后不会卡住。
4. 将elisun1.sh、elisun2.sh、elisun3.sh三个死循环脚本写入到系统服务中
结论:开机后机器不会卡住,但启动几分钟后三个脚本均被系统杀死。
Type=forking去掉或改成默认值Type=simple,脚本正常运行
三、 总结
开机启动的死循环脚本不会导致系统在启动过程中卡住。