我如何查看/停止当前正在运行的 crontab 任务?

我如何查看/停止当前正在运行的 crontab 任务?
  1. 我如何查看正在进行的 crontab 任务?
  2. 我怎么能够停止手动执行正在进行的 crontab 任务?

这个问题是关于查看当前正在运行的 cron 进程吗?

是的

要手动终止进程,一种方法是使用 pkill

我曾经考虑过使用 pkill/killall,但是我的 crontab 文件中的一些命令分别是!这意味着完成一个命令后,将启动下一个命令!例如:

sudo crontab -e
00 10 * * * /usr/bin/wget LINK ; shutdown -h now

所以,如果我杀死wget,计算机就会关闭!!!-> 我想完全杀死一个 cron 任务,而不是其中的一部分!

下一个pkill问题:脚本怎么办?(我已经导入了一些 bash 脚本crontab -e)-->sudo pkill ???

答案1

首先,在 crontab 中每行只使用一个命令。更改此 crontab 行:

00 10 * * * /usr/bin/wget LINK ; shutdown -h now

所以它看起来像:

00 10 * * * /path/to/my/crontab/script1.sh

/path/to/my/crontab/script1.sh使用此内容创建:

#!/bin/bash
/usr/bin/wget LINK
shutdown -h now

当然,不要忘记赋予它执行权限:

chmod +x /path/to/my/crontab/script1.sh

其次,您可以在输出中以有用且可读的格式看到正在运行的 crontab 任务:

ps -o pid,sess,cmd afx | egrep -A20 "( |/)cron( -f)?$"

它们将出现在第一行,如下所示:

1108  1108 cron
4288  1108 \_ CRON
4289  4289     \_ /bin/sh -c /path/to/my/crontab/script1.sh
4290  4289         \_ /bin/bash /path/to/my/crontab/script1.sh
4295  4289             \_ /usr/bin/wget LINK

第一列是 PID,第二列是会话 ID,第三列是 cron 启动的命令。您可以使用会话 ID 终止与特定 cron 任务相关的所有进程,因此在上面的示例中,您应该终止会话 ID 4289:

pkill -s 4289

答案2

要手动终止一个进程,一种方法是使用pkill。pkill 将停止名称中具有以下模式的所有进程。例如,要停止所有 wget 进程,请使用:

sudo pkill wget

答案3

像这样改变你的 cronjob

00 10 * * * /usr/bin/wget LINK && shutdown -h now

这应该可以工作,因为这&&意味着只有当第一个命令正确完成(向控制台/系统返回状态 0)时,第二个命令才会被执行,而事实不应该如此(因为该进程被用户杀死,它应该返回另一个值然后是 0)。

相关内容