Debian 11 (bullseye):用户 cron 作业未运行

Debian 11 (bullseye):用户 cron 作业未运行

我在家中使用住宅 ISP 托管一台服务器,该 ISP 通过 DHCP 发布公共 IP 地址,也就是说,当我的 DCHP 租约续订时,我并不总是能得到相同的 IP。我创建了一个 bash 脚本来检查我的公共 IP 是否已更改,并通过电子邮件向我发送新的 IP 地址(如果已更改)。 “当前”IP 存储在我的主目录中的文本文件中,该文件是全局可读和可写的。我想每小时运行一次,但我似乎无法让 cron 运行任何为我提供工作机会。该脚本运行没有任何问题。

我已经查看了之前的问题,我认为不存在文件权限或输出处理问题。文件/作业永远不会出现在 /var/log/syslog 中。

想法?

版本控制

系统详细信息 ( uname -a):Linux jasonbourne 5.10.0-19-amd64 #1 SMP Debian 5.10.149-2 (2022-10-21) x86_64 GNU/Linux

cron 详细信息 ( apt info cron):Version: 3.0pl1-137

bash 详细信息 ( apt info bash):Version: 5.1-2+deb11u1

bash 脚本:

#!/bin/bash

#known (current) IP
current_ip=`cat /home/jasonbourne/.current_ip`

#check for actual IP
check_ip=`dig -4 +short myip.opendns.com @resolver1.opendns.com`

if [ $check_ip != $current_ip ]
then
    message="`hostname`'s IP address changed from $current_ip to $check_ip on `date +%D` at `date +%T`"
    email="[email protected]"
    subject="`hostname` IP address change!"
    echo $message | mail -r $email -s "$subject" $email
    echo $check_ip > /home/jasonbourne/.current_ip
fi

该脚本和我当前的IP有适当的权限:

jasonbourne@debian:~$ ls -la /usr/bin/public-ip-monitor.sh
-rwxr-xr-x 1 root root 873 Dec 28 20:14 /usr/bin/public-ip-monitor.sh
jasonbourne@debian:~$ ls -la /home/jasonbourne/.current_ip
-rw-rw-rw- 1 jasonbourne jasonbourne 15 Dec 28 21:28 /home/jasonbourne/.current_ip

crontab 和 cron.time 尝试:

cron 服务运行得很好:

jasonbourne@debian:~$ sudo systemctl status cron
● cron.service - Regular background program processing daemon
     Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2022-12-28 00:32:37 EST; 21h ago
       Docs: man:cron(8)
   Main PID: 14242 (cron)
      Tasks: 1 (limit: 4583)
     Memory: 1.0M
        CPU: 3.949s
     CGroup: /system.slice/cron.service
             └─14242 /usr/sbin/cron -f

我已经将我的用户 crontab 设置为crontab -e并尝试过0 * * * * /usr/bin/public-ip-monitor.sh@hourly /usr/bin/public-ip-monitor.sh。我还将脚本放入了/etc/cron.hourly.

答案1

/etc/cron.hourly/public-ip-monitor.sh不起作用的原因是每小时的 cron 条目是通过run-parts/etc/crontab 文件启动的:

01 * * * * root cd / && run-parts --report /etc/cron.hourly

运行部件关于其运行的内容有一定的规则:

run-parts 运行在下面描述的约束内命名的所有可执行文件,这些文件在目录目录中找到。

如果未给出 --lsbsysinit 选项和 --regex 选项,则名称必须完全由 ASCII 大写和小写字母、ASCII 数字、ASCII 下划线和 ASCII 减号连字符组成。

因此,以扩展名命名的文件.sh将不会运行。

帽子提示克诺布所有答案为我指明了这个方向。

相关内容