我制作了一个名为 的脚本purging.sh
。我在该脚本中使用了cd
命令,并且该脚本多次更改目录,因此我为该cd
命令分配了一些变量,这反过来又有助于更改目录。
cd /home/parthipan/test/wireshark/$a/$b
要运行脚本,我必须使用source ./purging.sh
or . ./purging.sh
。
但我必须安排我正在使用 crontab 的脚本,
10 01 * * * . /home/parthipan/test/purging.sh
我的脚本的开始:
#!/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 上运行。我在最后一行使用了 logger 命令,以便消息将打印在/var/log
.
但消息打印是,
May 1 00:50:01 parthipan-nadar systemd: Started Session 24 of user root.
之后就没有其他日志形式了。但所需的日志应该是Data has been purged
.
答案1
当您在 shell 中获取它时它就可以工作,因为您似乎ll
在脚本中使用了您的别名。从 cron 执行的脚本没有您的环境,因此您需要更明确地设置PATH
(如果您调用位于/bin
或之外的可执行文件/usr/bin
),而不是依赖于您的特定别名或环境变量。如果您的 ll
别名是 的别名ls -l
,则改用ls -l
(但请参阅下面的第一点)。
其他一些评论:
不解析 ls。如果您需要根据年龄过滤文件,请使用
stat
或find
.您不需要在日期调用中嵌套日期调用:使用
-d "60 days ago"
不要仅仅为了获取年月日而调用 date 6 次(!!):
read -r year month day < <(date -d "60 days ago" "+%Y %m %d")
使用描述性变量名称。
a
b
c
...很糟糕。