我试图禁用交换在我们的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
1条答案
按热度按时间ulydmbyx1#
确保在crontab中声明了SHELL和PATH,这样就不必为正在运行的所有命令指定绝对路径。
在cron.d文件下尝试以下操作: