crontab 环境变量问题,求助

2019-05-04 01:38:52 +08:00
 moa

Linux 新手,问个基础问题. 搭了个本地 IPV6 的 DDNS 服务,用 Crontab 定时执行. 目前出现问题,.sh 文件手动执行无任何问题,Crontab 执行持续报错.

把报错结果 LOG 输出,Cat 显示为:

57: read: Illegal option -n


查找代码结构.

第 57 行为 while read -n1 c

各位大大帮忙看看.这个问题怎么解决?搞了好久没搞定.

是需要把 Read 的环境变量导入么,read 的默认路径在哪,系统 Debian.?????


相关上下代码为:

current_ipv6=nslookup -query=AAAA $aliddnsipv6_name 2>&1 #echo $current_ipv6

current_ipv6=echo "$current_ipv6" | grep 'Address: ' | tail -n1 | awk '{print $NF}' echo $current_ipv6

if [ "$?" -eq "0" ] then current_ipv6=echo "$current_ipv6" | grep 'Address: ' | tail -n1 | awk '{print $NF}' echo $current_ipv6

if [ "$ipv6" = "$current_ipv6" ]
then
    echo "skipping"
fi 

fix when A record removed by manual dns is always update error

else unset aliddnsipv6_record_id fi

timestamp=date -u "+%Y-%m-%dT%H%%3A%M%%3A%SZ"

urlencode() { # urlencode <string> out="" while read -n1 c do case $c in [a-zA-Z0-9._-]) out="$out$c" ;; *) out="$outprintf '%%%02X' "'$c"" ;; esac done echo -n $out }</string>

1612 次点击
所在节点    问与答
6 条回复
ochatokori
2019-05-04 02:29:47 +08:00
cron 有个坑就是 cron 执行的时候不像普通登录后的 shell 带有 /etc/profile 里面定义的环境变量
不知道你是不是这个问题

临时解决办法是在需要执行的 shell 脚本前面加个
source /etc/profile
或者 export 手动定义
alvinbone88
2019-05-04 03:04:55 +08:00
shell 的问题
cron 默认使用 sh 来执行脚本,刚好 Debian 把 sh 链接到 dash 上了,而 dash 的 read 没有-n 这个选项
Iterator
2019-05-04 08:36:21 +08:00
是个独立的小环境,PATH bash 都跟自己用 terminal 是不一样的
moa
2019-05-04 10:09:05 +08:00
@ochatokori 试了加载变量 log 还是报错
moa
2019-05-04 11:56:34 +08:00
@alvinbone88 这种有什么好的解决方案么

cron 前面加了 source /etc/profile; 还是不行
moa
2019-05-04 17:17:27 +08:00
@alvinbone88 搞定了 多谢 果然是这个问题导致的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/560784

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX