linux - 作为 cron 作业运行时,shell 脚本无法完全运行

标签 linux shell cron centos

我通过 crontab 设置为每分钟运行一次的 shell 脚本遇到了一个特殊问题。

我使用 Pelican 作为博客平台,并希望在有新帖子时以半自动化方式更新网站。为此,我创建了一个脚本来在与内容相同的目录中查找名为 respawn 的文件(它通过 Dropbox 同步,因此我只需在其中创建同步到服务器的文件)。

脚本是这样编写的,如果文件 respawn 存在,那么它会重建博客并将其删除。如果不是,则退出。

这是名为 publish.sh 的脚本

#!/bin/bash
Respawn="/home/user/content/respawn"
if [ -f $Respawn ]
then
   sudo /home/user/sb.sh;rm $Respawn
else
    exit 0
fi
exit 0

这是 shell 脚本的 crontab

* * * * */home/user/publish.sh

最后,这是 sb.sh

的内容

制作 html -C/var/www/site/

现在,如果我通过 SSH 运行脚本并且 respawn 存在,它会完美运行。但是,如果我让 cron 执行它,那么它不会运行 shell 脚本,但它仍然会删除 respawn 文件。

我还有另一个 cron 作业,它每 4 小时运行一次,只需运行 sb.sh 即可完美运行(以防我忘记发布某些内容)。

我试过使用用户的 crontab 并将其添加到 root 中,我还将用户添加到 sudoers 文件中,这样它就可以在没有密码干预的情况下运行。两者似乎都不起作用。我错过了什么吗?

最佳答案

必须是sudocron 无法输入密码。 检查运行 cron 的用户的邮件以确认。类似于 sudo: no tty present

关于linux - 作为 cron 作业运行时,shell 脚本无法完全运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15636997/

相关文章:

linux - 当变量再次具有特殊字符时,如何在 sed 命令中使用变量?

php - 如何解决 Cron 作业运行错误

php - Cron 作业不运行

docker - 如何解决crontab中的 "curl: (7) Failed to connect to localhost port 5001: Connection refused"?

linux - 自定义 Linux 内核模块来显示年份、日期和时间

python - 使用 Python 自动输入以暴力破解在 cli 中运行的程序

php - 如何在 PHP 中执行 linux 命令并以原始格式回显输出?

regex - Shell 脚本 - 列出文件、读取文件并将数据写入新文件

c - 在 uint128_t 整数上下文中对十六进制字符串的操作

regex - 当一个模式是 bash/awk 中的变量时如何在两种模式之间取线(动态正则表达式)