【发布时间】:2020-06-09 00:21:14
【问题描述】:
在花了一整天的时间思考这个问题之后,我想我会问我的第一个 SO 问题。
所以,我有这个 bash 脚本,当我从任何地方以及从我的用户和 root 运行它时,它完全可以工作。它所做的只是移动一些文件,然后执行 python3 脚本和 mysql 语句:
#!/bin/bash
rm -rf /some/directory
cp -r /origin/directory /destination/directory
/usr/bin/python3 /python/script/directory.py
/usr/bin/mysql --login-path=host --database=dbname -e 'CALL function()'
当我尝试将其放入 cron 时出现问题。由于这些命令需要 sudo,我将其添加到 sudo crontab -e 并进行了一些测试。 问题是命令执行了,但什么也没发生。
这是我在 crontab 中输入的内容:
0 * * * * bash /directory/with/script.sh 2>&1 > /directory/with/script/latest_run
这是检查sudo grep CRON /var/log/syslog时的输出:
Jun 8 00:42:01 hostname CRON[7148]: (root) CMD (bash /directory/with/script.sh 2>&1 > /directory/with/script/latest_run)
但是,当我检查文件 latest_run 时,它返回空。它确实每次都被创建。更令人担忧的是,我试图更新的数据库根本没有得到任何数据,但是当我自己手动执行它时,它会完成我需要它做的所有事情。
我整天都在玩我的发行版上的东西,看看我是否可以解决这个问题,但我找不到任何解决方案。如果有人知道出了什么问题,我将不胜感激!
谢谢!
【问题讨论】:
-
你能试试这个吗?键入
sudo su -,如果询问,请键入密码。您将进入根目录。然后执行crontab -e并在不久的将来在那里输入您的cron 条目。看看是否运行。 -
刚试过,结果一样。数据库没有任何反应,输出文件为空。
-
好的,所以,也许你的脚本在 cron 下运行良好,但脚本没有完成它应该做的工作。像这样更改您的
.sh文件并允许cron 运行shell 脚本:ideone.com/jHmRsk。在您的输出中,您是否看到所有正在运行和已完成的运行行? -
感谢脚本。是的,当 cron 执行时,所有的回声都会被触发并打印到文件中。我认为问题可能是 bash 试图执行 python 和/或 mysql 调用?我不知道如何明确地将这些打印异常放入文件中。
-
directory.py 是做什么的?
标签: python-3.x bash cron