首页 > 系统相关 >Linux下实现程序开机自启(rc.local 和 systemctl)

Linux下实现程序开机自启(rc.local 和 systemctl)

时间:2023-07-26 15:45:18浏览次数:31  
标签:systemctl service 重启 sudo youngtest 自启 Linux _%

需求:

实现了一个程序,需要在ubuntu上跑起来。能开机自启,且崩溃了也能自己重启。有两种实现方式,个人推荐第二种。

方式1:

实现方式:

直接将要启动程序的运行命令加在 /etc/rc.local 中,开机时会运行这里的命令。
我使用时:写了一个脚本DDR_Guard.sh,在脚本里面循环判断程序有没有开启。如果没有开启,则调用相应的启动指令。
比如:

注意:

1)此方式在Ubuntu20.04之后就取消了,只在Ubuntu16.04中测试可行。
2)在 /etc/rc.local 中的命令一定要可以结束,如果结束不了会导致系统开不起来。所以我用了后台运行:也就是nohup。

方式2(推荐使用):

采用systemctl的方式,好像很挺方便的样子。(实际用时把youngtest换成自己需要的名字即可)

强烈建议看看这个文档,里面介绍了一些参数的具体含义:https://ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html

准备工作:

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 +x youngtest.sh test0726

如何配置:

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: 只要不是通过systemctl stop来停止服务,任何情况下都必须要重启服务,默认值为no。还可以配置有条件重启,具体参考上述文档。
RestartSec=5: 重启间隔,比如某次异常后,等待5(s)再进行启动,默认值0.1(s)
StartLimitInterval: 无限次重启,默认是10秒内如果重启超过5次则不再重启,设置为0表示不限次数重启

2)拷贝到: /lib/systemd/system  可能还要注意权限问题。

3)修改配置文件后需要重加载配置:

sudo systemctl daemon-reload

4)设置开机自启:

sudo systemctl enable youngtest.service

之后就可以直接重启了。

5)之后就可以操作了:
启动:

sudo systemctl start youngtest.service

停止:

sudo systemctl stop youngtest.service

 查看状态:

sudo systemctl status youngtest.service

测试自动重启功能:

 

标签:systemctl,service,重启,sudo,youngtest,自启,Linux,_%
From: https://www.cnblogs.com/xcywt/p/17582643.html

相关文章

  • linux netfilter 引发网络不稳定
     记录前因:K8S部署的集群,最近遇到域名解析失败情况,查看coredns日志,没有明显问题。解析报错:connectiontimedout;noserverscouldbereached 重启集群服务,解析没有问题,基本确认跟某个业务服务有关联解决过程: 查看跟踪连接数:sysctlnet.netfilter.nf_conntrack_coun......
  • linux自用命令
    1.touchnewfile若newfile不存在,则新建一个文件;如果存在,则修改文件的时间为当前时间 2.通配符*和?*:代表0个/1个/多个字符?:仅代表1个字符 3.find.-namenew.txt在当前目录中查找名字为new.txt的文件,可以结合前面的通配符用,用通配符的时候需要用双引号"*test"。-name是......
  • Linux中退出编辑模式的命令
    vim有三种模式,注意:这三种模式有很多不同的叫法,我这里是按照鸟哥的linux书中的叫法。一般指令模式、编辑模式、指令列命令模式 1.vim文件名    进入一般模式;2.按i进行编辑  进入编辑模式;(或者I,o,O,a,A,r,R)3.编辑结束,按ESC键跳到一般模式模式;4.按:  ......
  • Linux 中的目录是按按照功能和用途划分的
    在Linux中,文件系统以层次结构的方式组织。整个文件系统由多个目录和文件组成,形成了一个树状结构。Linux的目录结构是按照功能和用途进行划分的。以下是Linux主要目录的一些常见划分:/:根目录,是整个文件系统的起始点。/bin:系统可执行的二进制文件(命令)存放目录。/boot:用于......
  • Linux内核notifier机制
    参考:https://www.cnblogs.com/pengdonglin137/p/4075148.htmlhttps://www.cnblogs.com/schips/p/linux_notifier.htmlhttps://www.cnblogs.com/3me-linux/p/6122444.html......
  • 实操--Linux磁盘分区、挂载
     Linux分区挂载mount,访问根目录以外的文件,比如别的硬盘,就好像Windows插U盘创建好了要先初始化!(看有没有UUID)磁盘情况查询工作实用指令 ......
  • Linux使用snap安装最新版redis
    步骤1:安装Redis首先,确保您的系统上已安装snap。如果尚未安装snap,请根据您的Linux发行版提供的说明进行安装。打开终端,并执行以下命令来安装Redis:$sudosnapinstallredis等待安装完成。步骤2:进入RedisCLIRedis的snap安装没有预配置的文件(redis.conf)。因此,我们需......
  • 01-[Linux][GPIO]GPIO编程示例代码
    基于MTK平台的AndroidLinux驱动1、DTS配置如下gpio_sample:gpio_sample{compatible="mediatek,gpio-sample";input,high-gpio=<&pio77GPIO_ACTIVE_HIGH>;input,low-gpio=<&pio70GPIO_ACTIVE_HIGH>;out......
  • Linux man 的使用
    前言man命令是Linux下的帮助指令,man更为强大的是,不仅可以查看Linux中命令的使用帮助,还可以查看软件服务配置文件、系统调用、库函数等帮助信息。而man命令也并不是英文单词“man”的意思,它是单词manual的缩写,即使用手册的意思。下面对man手册进行介绍。manman手册页文件存放......
  • Linux版python安装教程
    如果你希望在CentOS上使用源码编译的方式安装Python3,请按照以下步骤进行操作:安装编译工具和依赖项:在开始编译前,需要安装一些编译工具和Python3的依赖项。在终端中运行以下命令:sudoyumgroupinstall"DevelopmentTools"sudoyuminstallopenssl-develbzip2-devel......