命令ps-aux|grep cron结果的疑问

ps-aux|grep cron运行的结果,在运行的进程cron
/usr/sbin/cron -f
通过man cron命令
/usr/sbin/cron -f的英文解释
Stay in foreground mode, don’t daemonize.
是不是不对任务进行监视,那么应该怎么设置才能正常监视呢?

自从 systemd 以来,系统守护进程/系统服务的工作方式有了多种多样的实现方式。例如 cron.service,这个服务故意写成前台形式而非自行后台守护进程化,是为了方便 systemd 接住它前台输出到 stderr 和 stdout 的调试信息。cron 在这样的情况下当然仍然正常工作,这对 cron 的工作没有任何影响。

1 个赞

通过sudo crontab -e 将apt-get install softname -y,到点后一直不起作用,前面加上路径
/usr/bin/ 也没用,reboot,shutdown都是可以到点执行,就apt命令不成功

我能告诉你的是 crontab 绝对没有问题,apt 的事情需要你自己去调试,和这个帖子主题没关系。

我可以详细说一下 debug 的方式:用 shell 脚本包一层,把 stderr 和 stdout 重定向到文件中。例如:

* * * * * sh -c 'apt install -y webfs > /tmp/logl 2>&1'

运行后查看 log,可以看见问题所在。如下:

正在读取软件包列表...
正在分析软件包的依赖关系树...
正在读取状态信息...
下列【新】软件包将被安装:
  webfs
debconf: 无法初始化前端界面:Dialog
debconf: (系统未设定 TERM 环境变量, 所以对话框界面将不可使用.)
debconf: 返回前端界面:Readline
debconf: 无法初始化前端界面:Readline
debconf: (这个界面要求可控制的 tty。)
debconf: 返回前端界面:Teletype
dpkg-preconfigure: 重新开启标准输入失败:
升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。
需要下载 0 B/71.1 kB 的归档。
解压缩后会消耗 191 kB 的额外空间。
dpkg: 警告: 在 PATH 环境变量中找不到 ldconfig 或没有可执行权限
dpkg: 警告: 在 PATH 环境变量中找不到 start-stop-daemon 或没有可执行权限
dpkg: 错误: 2 在环境变量 PATH 中找不到该程序,或不可执行
提示:root 的 PATH 环境变量通常应当包含 /usr/local/sbin、/usr/sbin 和 /sbin
E: Sub-process /usr/bin/dpkg returned an error code (2)

结论:环境变量的缺失,尤其是 PATH 的缺失,导致了 apt 工作不正常。而这样对 PATH 的缺失处理是 cron 的特性之一,在写 crontab 时一定要时刻放在心中。如果讨厌传统 cron 的行为,可以研究研究 systemd timer。

1 个赞

楼主你需要记住一点。跟帖之前要把楼上所有的回帖都读一遍,并确认是否对自己有用。注意是所有的回帖。

谢谢你的调试方法,很有用,比/var/log/cron.log要有用,把/etc/crontab里的环境复制进crontab -e的打开的文件,就可以正常了
后来直接在/etc/crontab里写定时命令,竟然也可以,直接写命令,路径也不用写,奇怪,之前好像试过无效果,现在都能正常定时执行了