文章目录
Linux下设置程序开机自启动1、/etc/rc.local2、/etc/profile.d/3、使用 crontab 方式4、使用 systemd 服务测试代码Linux下设置程序开机自启动
在最后,我放了我测试时候要开机自启程序的源码逻辑。
1、/etc/rc.local
如果没有该文件,则创建该文件
vim /etc/rc.local
在文件末尾加上你开机需要执行的命令即可(写绝对路径,添加到系统环境变量的除外)
#!/bin/bash/home/czy/test/test &
可以使用reboot命令重启虚拟机,
[Ubuntu]重启之后会执行/etc/rc.local文件中的脚本
注意:这里的绝大多数操作都是需要在root用户或sudo权限才能操作的
在此之前,我先看到的一个方法是/etc/rc.d/rc.local
但是这个方法,我怎么都试不成功,如果有人知道怎么设置或知道问题出在哪的话,欢迎指点
在这里插入图片描述
这里可以看到是没有 test.log 文件生成,也就是程序没有执行
2、/etc/profile.d/
自己写一个shell脚本
将写好的脚本(.sh文件)放到目录
/etc/profile.d/
下,系统启动后就会自动执行该目录下的所有shell脚本。
这个和上面/etc/rc.local
的区别是,这种设置方法会提示程序已经执行完毕~~~
3、使用 crontab 方式
crond 是 linux 下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与 windows 下的计划任务类似,当安装完成操作系统后,默认会安装此服务 工具,并且会自动启动 crond 进程,crond 进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
因此我们可以使用 crondtab 命令创建一个任务,让该任务在重启时进行执行。
# crontab -e//进入编辑,输入如下行@reboot /home/czy/test/test//这个路径自己决定就好//上面我用的是可执行程序,使用脚本当然也是可以的@reboot /home/czy/test/test.sh
这里可以看到重启前是没有log文件的
reboot 重启后,程序已执行
4、使用 systemd 服务
Systemd 服务是一种以 .service 结尾的单元(unit)配置文件,用于控制由 Systemd 控制或监视的进程。简单说,用于后台以守护进程(daemon)的形式运行程序。
systmd service 文件一般放在/etc/systemd/system/文件夹中。
创建一个服务如下:
//在/etc/systemd/system/下创建一个服务,如下# vim ser.service//[Unit] 区块:启动顺序与依赖关系。//Description字段给出当前服务的简单描述[Unit]Description=Run a test Script at Startup//Service区块定义如何启动当前服务//ExecStart字段:定义启动进程时执行的命令[Service]ExecStart=/home/czy/test/test.sh//Install区块,定义如何安装这个配置文件,即怎样做到开机启动//WantedBy字段:表示该服务所在的 Target,Target的含义是服务组,表示一组服务[Install]WantedBy=default.target//更新服务配置文件,并使能服务# systemctl daemon-reload# systemctl enable test.service//重启系统# reboot
一个问题:
就是service部分如果是执行脚本的话,程序就只执行了一轮
[Service]
ExecStart=/home/czy/test/test.sh
如果service部分ExecStart后面跟的是可执行程序的话,又能正常执行
[Service]
ExecStart=/home/czy/test/test
望各位大佬指点🙏
测试代码
下面是我测试的开机自启程序的源码:
test.c
#include <stdio.h>#include <string.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int main (int argc, char **argv){intfd;inti = 10;char *buf = "Automatic startup\n";fd = open("/home/czy/test/test.log", O_WRONLY|O_CREAT|O_TRUNC, 0666);while(i){write(fd, buf, strlen(buf));i--;sleep(1);}return 0;}
test.sh
#!/bin/bash/home/czy/test/test &
参考链接:/s?id=1722174560616569543&wfr=spider&for=pc
systemd服务:/wangshui898/article/details/122130726
如果觉得《Linux下如何设置程序的开机自启动功能》对你有帮助,请点赞、收藏,并留下你的观点哦!