Docker下Ubuntu的定时任务

前面一篇文章中,我们己经在Docker中的Ubuntu中建立好了各种任务,比如nginx, sslh, ssh等等,域名什么的也配置好了。但是因为没有固定的IP地址,我们还是需要实现一个动态DDNS的功能,这个我们也通过脚本实现了,但是这个脚本需要定时运行,之前常用的方式是通过crontab建立一个周期性的任务,但是Docker中似乎没有这个,网上转了一圈发现可以通过如下的方式安装cron.

sudo apt install cron

熟练的加上一条任务:

*/10 * * * * /home/major/work/apps/ali_ddns.sh>/home/major/cron.log

加了之后,睡了一觉,NAS访问不了了,看了一圈,发现是DNS解析有问题,也就是相应的DNS记录并没有更新,这个cron也是完全没有Log,这个可咋整?网上又转悠了好久,发现如下的解决方法和/etc/pam.d/cron这个文件有关系,解决方法是把其中的一行进行注释就可以了:

# session    required     pam_loginuid.so

这样就可以正常的使用cron了,以后有需要就可以直接放到这里面就可以了。

需要说明的是Docker中,后面安装的一些服务,比如nginx, sslh, sshcron等都不会自动启动,没错cron也在里面,所以想通过@startup方式启动服务也是不可行的,因为我在Docker启动的时候默认是运行bash的,所以这些任务都不能自动启动。

服务的自启动

其实NAS上面的ubuntu容器默认是运行了一个bash,这样我们就可以通过终端去访问这个容器了,本来想着可以把这个命令改成我们自己定义的一个脚本,但是GUI界面似乎是不支持这个操作的,反正我找了挺久是没找到设置的具体位置。

此路不通,只有另想它法,既然镜像启动的时候运行了一个bash命令,那么我们可不可以从这个bash命令上做做文章呢?

答案是可以!!我们知道bash在运行的时候支持通过.bash_profile或者.bashrc实现比如设置别名等操作的前置命令,也就是说在这个脚本里面的命令都会在运行bash的时候被调用,那么我们是不是把需要开启的服务放到这个文件里面就行了呢?

答案是可以!!我们直接在.bashrc的末尾添加需要运行的命令就可以了,当然周期性的任务还是放到crontab中就好了,而cron的服务我们通过.bashrc开启就可以了,这样重启docker镜像之后,所有的服务都可以自动启动了,是不是非常完美?

答案是完美!!可以继续愉快的玩NAS了,还是个不断电的系统,爽歪歪呀。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值