添加开机自启任务介绍:
- 前言:
- 1、写脚本来执行要做的操作,将脚本加到系统的开机自启systemctl任务进程里面,这里启动起来的是root用户进程,这个启动起来之后可以在后头进程里面看到。
- 2、写脚本来执行要做的操作,将脚本加到普通用户的的开机自启任务进程里面,这里启动起来的是普通用户进程。这个可以专门起一个终端来显示看到。
- 3、 比如这里添加一个定时程序:
- 3.1、crontab编辑器选错后的解决方法:
- 3.2、corntab详细说明
前言:
有时候需要一些开机自启的任务或者定时重启任务,把程序过一段时间重启一次。有两种办法:
1、写脚本来执行要做的操作,将脚本加到系统的开机自启systemctl任务进程里面,这里启动起来的是root用户进程,这个启动起来之后可以在后头进程里面看到。
systemctl里面添加自启任务,需要如下几个文件,文件和脚本自己创建:
文件介绍:
1.1、忽略名字问题,run.sh脚本内容如下:
1.2、helloword-OD@.service内容:
.service文件定义了一个服务,分为[Unit],[Service],[Install]三个小节
[Unit]
Description="helloword object detection %i" 服务进程描述,写有意义的内容,便于识别
Requires=network.target senseshield.service 当前 Unit 依赖的其他 Unit,如果它们没有运行,当前 Unit 会启动失败,定义启动顺序
After=network.target senseshield.service 在network.target,senseshield.service启动后才启动
PartOf=helloword-OD.target
BindTo与 Requires 相似,但是一种更强的关联。启动这个服务时会同时启动列出的所有模块,当有模块启动失败时终止当前服务。
反之,只要列出的模块全部启动以后,也会自动启动当前服务。并且这些模块中有任意一个出现意外结束或重启,这个服务会跟着终止或重启。
PartOf这是一个 BindTo 作用的子集,仅在列出的任何模块失败或重启时,终止或重启当前服务,而不会随列出模块的启动而启动。
[Service]WorkingDirectory=/home/nvidia/.config #设置应用的工作目录
ExecStart=/bin/bash helloword_run.sh 执行启动脚本,指定启动单元的命令或者脚本,
ExecStartPre和ExecStartPost节指定在ExecStart之前或者之后用户自定义执行的脚本。Type=oneshot允许指定多个希望顺序执行的用户自定义命令。
Restart=on-failure fail时重启,这个选项如果被允许,服务重启的时候进程会退出,会通过systemctl命令执行清除并重启的操作。
1.3、helloword-OD.target内容:
.target定义了一些基础的组件,供.service文件调用
[Unit]
Description="helloword object detection %i" 简短描述,服务描述,写有意义的内容,便于识别
Requires=helloword-OD@1.service 当前 Unit 依赖的其他 Unit,如果它们没有运行,当前 Unit 会启动失败
#Requires=helloword-OD@{1..2}.service
#After=network.target senseshield.service
[Install]
WantedBy=multi-user.target 它的值是一个或多个 Target,当前 Unit 激活时(enable)符号链接会放入/etc/systemd/system目录下面以 Target 名 + .wants后缀构成的子目录中,单元被允许运行需要的一系列依赖单元,RequiredBy列表从Require获得依赖信息
1.4、创建好前面两个文件跟脚本之后:
将helloword-OD.target拷贝到系统/etc/systemd/system目录下,
cp helloword-OD.target helloword-OD@.service /etc/systemd/system
给复制过来的之两个文件添加执行权限:
sudo chmod +x helloword-OD.target helloword-OD@.service
执行命令添加helloword-OD.target,作用是会把helloword-OD.target添加在系统自启动项中。
sudo systemctl enable helloword-OD.target
1.5、这里可以用到的几个命令写一下:
程序自启动从启动项取消(关机重启就不在了):sudo systemctl disable helloword-OD.target
程序自启动添加到启动项(关机重启还在):sudo systemctl enable helloword-OD.target
关闭当前程序自启动(只关闭当前进程):sudo systemctl stop helloword-OD.target
开启当前程序自启动(只开启当前进程):sudo systemctl start helloword-OD.target
2、写脚本来执行要做的操作,将脚本加到普通用户的的开机自启任务进程里面,这里启动起来的是普通用户进程。这个可以专门起一个终端来显示看到。
1、比如我添加一个开机自启创建一个叫helloword.txt的任务,就使用helloword-od.desktop文件来实现这个文件夹你自交创建一个就行,内容如下:
忽略名字问题,run.sh脚本内容如下:
2、将这个helloword-od.desktop文件放在home目录下的隐藏文件有一个叫 “.config”的隐藏文件夹。他里面有一个叫autostart这个文件里面。这文件是系统自带的。
要是自己的这个.config里面没有auto_start这个文件夹,就自己创建一个,名字就叫auto_start。
3、放进去之后,确认helloword-od.desktop文件内容和目录路径正确,然后在终端使用:
gnome-session-properties
进入之后,勾选bash run.sh 并退出。
就完成了,每次开机自启都会在helloword_run.sh脚本所在的文件夹里面创建一个叫helloword.txt的文本。
3、 比如这里添加一个定时程序:
除了使用桌面自启动程序之外还要使用linux上面的crontab来添加程序定时重新启动。
1、在终端使用 crontab -e
1、编辑crontab文件,用来存放你要执行的命令
sudo crontab -e
2、第一次用这个命令,会让你选择文本编辑器,我选的是vim
(输入数字选择就是了!)
3:在这个文件最后面最后一行添加执行命令
每天的00点00分执行这个/home/user/workspace/helloword_auto_start路径下面的helloword_run.sh脚本并将结果输出到log.txt。
00 00 * * * cd /home/user/workspace/helloword_auto_start; bash helloword_run.sh > log.txt
4、还需要在helloword_run.sh里面最后一行前一行加上:
export DISPLAY=:0
5:重启cron来应用这个计划任务
sudo service cron restart
6、使用这个命令来查看是否有执行重启或者查看自己将输出重定向到txt文本的内容或者看进程名字是否有重启。 watch -n .5 "sudo systemctl status cron.service"
3.1、crontab编辑器选错后的解决方法:
方法一:
vim ~/.bashrc
在文件最后面添加以下代码,保存退出
export EDITOR=/usr/bin/vim
然后生效配置
source ~/.bashrc
方法二:
select-editor
3.2、corntab详细说明
1、crontab文件的基本格式如下所示
* * * * * command
分 时 天 月 周 命令
1、crontab中的每一行代表一个定期执行的任务,分为6个部分。前5个部分表示何时执行命令,最后一个部分表示执行的命令。每个部分以空格分隔,除了最后一个部分(命令)可以在内部使用空格之外,其他部分都不能使用空格。前5个部分分别代表:分钟,小时,天,月,星期,每个部分的取值范围如下:
分钟 0 - 59
小时 0 - 23
天 1 - 31
月 1 - 12
星期 0 - 6 0表示星期天
* (星号) 表示任意值,比如在小时部分填写 * 代表任意小时(每小时)
,(逗号) 可以允许在一个部分中填写多个值,比如在分钟部分填写 1,3 表示一分钟或三分钟
/(斜线) 一般配合 * 使用,代表每隔多长时间,比如在小时部分填写 /2 代表每隔两分钟。所以 /1 和 * 没有区别
2:crontab例子
(1)30 20 * * * date >> /home/date.log //每天的20:30将日期信息追加home目录下的date.log中
(2)5 20 13,14 * * date >> /home/date.log //每月的13日,14日20:5分将日期信息最追加home目录下的date.log中
(3)0,10 10,12 * * * date >> /home/date.log //每天10点至12点之间,隔10分钟将日期信息最追加home目录下的date.log中
(4)/5 * * * date >> /home/date.log //每5分钟将日期信息最追加home目录下的date.log中
3:crontab是UNIX系统下定期执行任务的触发器。用户把要定期执行的任务记录在这个文件下面,然后crond定期的去检查这个定期执行列表,有要执行的工作时便自动执行。
通过man crontab可以查看到下面的信息
(1)/etc/crond.allow 表示的是允许使用crontab的用户列表
(2)/etc/crond.deny 表示的是不允许使用crontab的用户列表
4: crontab常用的几个命令格式
crontab -l //显示用户的crontab文件的内容
crontab -e //编辑用户的crontab文件的内容
crontab -r //删除用户的crontab文件
1、 计划任务,crontab命令选项:
-u指定一个用户,
-l列出某个用户的任务计划,
-r删除某个用户的任务,
-e编辑某个用户的任务
2、cron文件语法:
分 小时 日 月 星期 命令
0-59 0-23 1-31 1-12 0-6 command
可用crontab -e命令来编辑,编辑的是/var/spool/cron下对应用户的cron文件,也可以直接修改/etc/crontab文件