【发布时间】:2016-02-01 16:30:06
【问题描述】:
我正在运行一个每小时的 cron 作业进行测试。该作业运行一个名为“rotateLogs”的 python 文件。 Cron 不能使用扩展,所以文件的第一行是#!/usr/bin/python。这个 python 文件(fileA)然后在计算机的其他地方调用另一个 python 文件(fileB)。 fileB 注销到带有时间戳等的日志文件。但是,当 fileB 作为 cron 作业通过 fileA 运行时,它会将其日志文件创建为 rw-r--r-- 文件。
问题是,如果我尝试从 fileB 登录文件,除非您使用 sudo 权限运行它们,否则它们无法写入文件。所以我正在寻找一些方法来处理这个问题。理想情况下,将文件简单地制作为 rw-rw-r-- 文件会很好,但我不知道如何使用 cron 来做到这一点。感谢您的帮助。
编辑:rotateLogs(故意不是 .py):
#!/usr/bin/python
#rotateLogs
#Calls the rotateLog function in the Communote scripts folder
#Designed to be run as a daily log rotation cron job
import sys,logging
sys.path.append('/home/graeme/Communote/scripts')
import localLogging
localLogging.localLog("Hourly log",logging.error)
print "Hello"
crontab 中没有命令,但它在每小时 cron 上正常运行(每小时 17 分钟)。
FileB的相关函数:
def localLog(strToLog,severityLevel):
#Allows other scripts to log easily
#Takes their log request and appends it to the log file
logging.basicConfig(filename=logDirPath+getFileName(currDate),format="%(asctime)s %(message)s")
#Logs strToLog, such as logging.warning(strToLog)
severityLevel(strToLog)
return
我不确定如何找到 cronjob 的用户/组,但它只是在 /etc/cron.hourly 中,我认为是 root?
【问题讨论】:
-
感谢您的评论,但这没有用。我在 /etc/profile 和 ~/.bashrc 中都将它设置为 002,但它仍然将文件设置为 644。
-
我认为如果您可以对问题进行以下操作,那么可能会更容易回答:1)crontab 行; 2)
rotateLogs(.py)中的代码调用fileB,3)fileB中的代码创建/附加日志文件;可能还有 4) cronjob 的用户/组/shell(以及日志文件的用户/组,如果不同)。可能很简单,比如使用#!/usr/bin/env python,或者在某处添加chmod g+w logfile,或者os.umask(002)。 -
好电话,我现在就更新。
-
已更新。 /env python 不会改变任何东西。接下来我会尝试 os.umask。感谢所有这些想法,一个可能会起作用。
-
“Cron 不能使用扩展” - 这是什么意思? Unix 不使用文件扩展名。
标签: python cron file-permissions