bash +命令在linux shell上工作正常,但在cron作业中无法正常工作

nukf8bse  于 2023-06-24  发布在  Shell
关注(0)|答案(1)|浏览(160)

我试图禁用交换在我们的Linux机器与cron作业
首先,我想解释一下在linux机器上禁用swap的正确方法(我们有RHEL 7.x)
过程应该是这样的
1 swapoff -a &(在本例中,我们将其用作进程)
2注解/etc/fstab中带有swap的行为:
3 #/dev/mapper/vg_lab_swap swap swap defaults 0 0
我们创建名为swap_disable.cron的cron作业
cron jon看起来像这样(我们为每分钟设置cron作业,只是为了测试)

* * * * *  root [[ ` swapon -s | wc | awk '{print $1}' ` -ne 0 ]] && [[ `  ps -ef | grep  "swapoff -a" | grep -v grep | wc | awk '{print $1}' ` -eq 0 ]] && ( swapoff -a & ) && sed -ie '/\/dev\/mapper\/vg_lab_swap/ s/^#*/#/' /etc/fstab

因此,在等待超过一分钟后,我们看到/etc/fstab文件没有更新,实际上交换没有被禁用
所以我们在cron作业中只设置了下面一行,以了解语法是否有错误
更多swap_disable.cron

* * * * * root [[ ` swapon -s | wc | awk '{print $1}' ` -ne 0 ]] && [[ `  ps -ef | grep  "swapoff -a" | grep -v grep | wc | awk '{print $1}' ` -eq 0 ]] && echo why_line_not_works >/tmp/file.txt

说明:
swapon -s | wc | awk '{print $1}'-验证交换是否已禁用
ps -ef | grep "swapoff -a" | grep -v grep | wc | awk '{print $1}'-验证swapoff进程是否已运行
不幸的是,上面的这一行也不起作用,文件/tmp/file.tx t没有创建
那么我cron工作有什么问题呢?
为什么是Line:

[[ ` swapon -s | wc | awk '{print $1}' ` -ne 0 ]] && [[ `  ps -ef | grep  "swapoff -a" | grep -v grep | wc | awk '{print $1}' ` -eq 0 ]] && echo why_line_not_works >/tmp/file.txt

在linux shell控制台上工作正常,但在cron工作中不正常?
当我们从sh运行它时

cron.d]# sh
sh-4.2#  [ ` swapon -s | wc | awk '{print $1}' ` -ne 0 ] && [ `  ps -ef | grep  "swapoff -a" | grep -v grep | wc | awk '{print $1}' ` -eq 0 ] && echo why
why
ulydmbyx

ulydmbyx1#

确保在crontab中声明了SHELL和PATH,这样就不必为正在运行的所有命令指定绝对路径。
在cron.d文件下尝试以下操作:

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

* * * * * root [[ ` swapon -s | wc | awk '{print $1}' ` -ne 0 ]] && [[ `  ps -ef | grep  "swapoff -a" | grep -v grep | wc | awk '{print $1}' ` -eq 0 ]] && echo why_line_not_works >/tmp/file.txt

相关问题