需求:
实现了一个程序linux软件工程师培训,须要在ubuntu上跑上去。能开机自启,且崩溃了也能自己重启。有两种实现方法,个人推荐第二种。
形式1:实现方法:
直接即将启动程序的运行命令加在/etc/rc.local中,开机时会运行这儿的命令。
我使用时:写了一个脚本DDR_Guard.sh深度linux,在脚本上面循环判定程序有没有开启。若果没有开启,则调用相应的启动指令。
例如:
注意:
1)此方法在Ubuntu20.04以后就取消了,只在Ubuntu16.04中测试可行。
2)在/etc/rc.local中的命令一定要可以结束,假如结束不了会造成系统开不上去。所以我用了后台运行:也就是nohup。
形式2(推荐使用):
采用systemctl的方法,似乎很挺便捷的样子。(实际用时把youngtest换成自己须要的名子即可)
强烈建议瞧瞧这个文档修改linux开机启动权限,上面介绍了一些参数的具体含意:
打算工作:
1)为了测试,我写了一个程序test0726,上面循环往一个文件上面输入一句话。
2)还写了一个脚本:youngtest.sh
#!/bin/bash cd /home/dadao/workspace/test/systemctltestLog v_time=`date "+%Y_%m_%d_%H_%M_%S"` echo $v_time" Start runing ++++++++++++++++++++ " >> youngtestsh.log ./test0726 echo $v_time" Process quit ---------------------- " >> youngtestsh.log
3)须要有执行权限:chmod+xyoungtest.shtest0726
怎样配置:
1)编撰一个youngtest.service,内容如下:
[Unit] Description=test [Service] Type=simple User=dadao ExecStart=/home/dadao/workspace/test/systemctltestLog/youngtest.sh Restart=always RestartSec=30 StartLimitInterval=0 [Install] WantedBy=multi-user.target graphical.target
以下参数按照实际须要进行配置:
User:表示以那个用户启动,不写默认是root。
ExecStart:就是要执行的词句。
Restart=always:只要不是通过systemctlstop来停止服务,任何情况下都必需要重启服务,默认值为no。还可以配置有条件重启,具体参考上述文档。
RestartSec=5:重启间隔,例如某次异常后修改linux开机启动权限,等待5(s)再进行启动,默认值0.1(s)
StartLimitInterval:无限次重启,默认是10秒内若果重启超过5次则不再重启,设置为0表示不限次数重启
2)拷贝到:/lib/systemd/system可能还要注意权限问题。
3)更改配置文件后须要重加载配置:
sudosystemctldaemon-reload
4)设置开机自启:
sudosystemctlenableyoungtest.service
以后就可以直接重启了。
5)以后就可以操作了:
启动:
sudosystemctlstartyoungtest.service
停止:
sudosystemctlstopyoungtest.service
查看状态:
sudosystemctlstatusyoungtest.service
测试手动重启功能:
文章评论