首页 » 信息技术 »

cron定时执行脚本遇到的问题

2019年6月5日 / 45次阅读
Linux

初次学习使用Linux的cron定时任务系统,本文记录一下我遇到的问题和解决方法:

1,Permission denied

/bin/sh: 1: /home/xinlin/maixj.net/tools/renew_acc.sh: Permission denied

检查你的脚本文件renew_acc.sh,是否有可执行权限。

使用chmod命令增加脚本的可执行权限。

2,not found

/bin/sh: 1: /home/xinlin/maixj.net/tools/renew_acc.sh: not found

renew_acc.sh的#!(shebang)写的是/usr/bin/bash,

修改为#!/bin/bash就OK,

我是用的Ubuntu系统,它与CentOS稍有不同,在/usr/bin/目录下面,你找不到sh和bash。

3,不要在cron中执行有sudo的命令

有sudo,意味着系统会让你输入密码,这样实际上就中断了脚本的自动执行。

不安全的方法是sudo的时候直接将密码写在命令行里面:$ echo 'your password' | sudo -S xxxx.sh

比较安全的方式是:

$sudo visudo

修改/etc/sudoers文件,找到username所在的sudo组,然后在组配置的后面,增加一行:

username ALL=(ALL:ALL) NOPASWD: /path/to/script.sh

用这个方式,此脚本如果不在cron中执行,也可以不需要输入密码。

但是,如果脚本要在cron中执行,仅仅增加这一行还不够,会出现:sudo: no tty present and no askpass program specified 的错误提示。

在网上查了很多资料,也没有找到解决问题的办法,Ubuntu的sudoers文件里面,压根就没有Default requiretty这一行。

在一些英文页面看到这样的说法:有sudo的脚本,直接给在root的cron中执行即可。对呀,为什么不呢?!

使用sudo crontab -e编辑root的cron任务。

4,重定向到文件的路径,默认是用户的home

一点经验:在脚本中,请都使用绝对路径!

将stderr重定向到stdout,将stdout追加重定向到log文件,这样你不会错过任何打印出来的信息。比如下面这样的写法:

$ command >> /path/to/log 2>&1

关于Linux系统的重定向学习

以上就是我初次使用cron定时任务系统时,遇到的几个问题的总结。

本文链接:https://www.maixj.net/ict/cron-sh-21597

相关文章

留言区


前一篇:
后一篇:

栏目精选

云上小悟,麦新杰的独立博客

Ctrl+D 收藏本页

栏目


©Copyright 麦新杰 Since 2014 云上小悟独立博客版权所有 备案号:苏ICP备14045477号-1。云上小悟网站部分内容来源于网络,转载目的是为了整合信息,收藏学习,服务大家,有些转载内容也难以判断是否有侵权问题,如果侵犯了您的权益,请及时联系站长,我会立即删除。

网站二维码
go to top