很多时候,我们都需要开机自动执行某段命令,比如之前的挂载onedrive云盘,最好能在每次开机一段时间后执行挂载任务。
在物理主机中
把命令写入xxx.sh文件:
#! /bin/bash
#这里写需要执行的语句
利用crontab开机后执行xxx.sh
crontab -e
#进入编辑,输入如下行
@reboot /home/test.sh #开机马上启动这个脚本,如果脚本中有依赖系统中其他服务,会发生因为其他服务启动不完全,而导致自己脚本失败的情况
@reboot sleep 60; /home/test.sh #最好加上休眠一会,等待其他服务启动完全了,再启动自己的脚本
@reboot (sleep 60; sh /home/test.sh) #设置脚本在启动后的60s启动、/home\test.sh 就是脚本的存放地址
nohup后台任务
语法格式:
nohup Command [ Arg … ] [ & ] nohup /root/runoob.sh & 在终端如果看到以下输出说明运行成功: appending output to nohup.out 这时我们打开 root 目录 可以看到生成了 nohup.out 文件。
nohup python logdataCollection.py >>/logs/log_cronjob.txt 2>&1 &
在docker中
对于在docker中,以上两种方法都不太有效,可以把构建好的环境打包成镜像,然后重新生成容器时加入以下参数:
docker run -ti ouruser/test:v1 /bin/bash /home/service.sh
其中,/home/service.sh就是所要执行的脚本
方式二:
在docker中添加需要启动的服务脚本 service.sh (假定放在 /home 目录下)
#!/bin/sh
/bin/serviceA start #启动服务
/bin/bash #保留一个终端,防止容器自动退出
将容器打包为镜像
docker commit -m “Added service test” -a “Docker Newbee” 0b2616b0e5a8 ouruser/test:v1
启动新的镜像
docker run -ti ouruser/test:v1 /bin/bash /home/service.sh
systemctl restart nezha-agent.service
systemctl restart status-client
docker run -it mystatus:0.1 /bin/bash /root/start.sh