首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么源命令不能在使用包含cd命令的shell脚本的crontab中工作?

为什么源命令不能在使用包含cd命令的shell脚本的crontab中工作?
EN

Unix & Linux用户
提问于 2020-05-20 13:49:31
回答 1查看 1.3K关注 0票数 0

我制作了一个名为purging.sh的脚本。我在该脚本中使用了cd命令,脚本多次更改目录,因此我为cd命令分配了一些变量,这反过来有助于更改目录。

代码语言:javascript
复制
cd /home/parthipan/test/wireshark/$a/$b

要运行脚本,我必须使用source ./purging.sh. ./purging.sh

但我必须安排脚本,因为我正在使用crontab,

代码语言:javascript
复制
10 01 * * * . /home/parthipan/test/purging.sh

开始我的脚本:

代码语言:javascript
复制
#!/bin/bash
a=$( date -d "`date` -60 days" "+%Y%m%d" | cut -b 1-4 )
b=$( date -d "`date` -60 days" "+%Y%m%d" | cut -b 5-6 )
c=$( date -d "`date` -60 days" "+%Y%m%d" | cut -b 7-8 )
cd /home/parthipan/test/wireshark/$a/$b
d=$( ll | awk -F " " '{print $9}' | awk -v value=$c '$1 < value' | sed "/^$/d" | xargs )
echo "The Days archiving are: $d"
e=$( ll | awk -F " " '{print $9}' | awk -v value=$c '$1 < value' | sed "/^$/d" | wc -l )
f=$( date -d "`date` - 61 days" "+%Y%m%d" | cut -b 5-8 )
if (( $e > 0 ))
        then
                tar --no-overwrite-dir -czvf backup_$f.tar.gz $d
                mv backup_$f.tar.gz /home/parthipan/test/logs_backup
                #rm -rf $d
                logger Data has been purged

上面的脚本将继续使用fi命令结束。它通常在cli上工作,但对crontab不起作用。我在最后一行中使用了记录器命令,以便在/var/log中打印消息。但信息打印是,

代码语言:javascript
复制
May  1 00:50:01 parthipan-nadar systemd: Started Session 24 of user root.

在此之后,没有其他日志表单。但是所需的日志应该是Data has been purged

EN

回答 1

Unix & Linux用户

发布于 2020-05-20 19:52:13

当您在shell中获取它时,它会工作,因为您似乎在脚本中使用了您的ll别名。从cron执行的脚本没有您的环境,因此您需要更明确地设置PATH (如果您调用的可执行文件位于/bin/usr/bin之外),而不依赖于特定的别名或环境变量。如果您的ll别名是ls -l的别名,则改用ls -l (但请参阅下面的第一点)。

其他一些评论:

  • 不要解析ls。如果需要根据年龄筛选文件,请使用statfind
  • 您不需要在日期调用中嵌套日期调用:使用-d "60 days ago"
  • 不要给约会打6次电话(!!)只需获取年月日:请阅读-r年月日<<(日期-d "60天前"+%Y %m % %d")
  • 使用描述性变量名称。a b c .都是坏的。
票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/587890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档