我正在运行一个每小时的cron工作进行测试。这个作业运行一个名为“rotateLogs”的python文件。 Cron不能使用扩展,因此文件的第一行是#!/ usr / bin / python。然后,此python文件(fileA)调用计算机中其他位置的另一个python文件(fileB)。 fileB使用时间戳等注销日志文件。但是,当fileB作为cron作业通过fileA运行时,它会将其日志文件创建为rw-r - r-- files。
问题是,如果我然后尝试从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用户?
答案 0 :(得分:2)
事实证明cron
没有提供任何shell配置文件(/etc/profile
,~/.bashrc
),因此必须在cron调用的脚本中设置umask。 / p>
使用用户级crontabs(crontab -e
)时,可以按如下方式设置umask:
0 * * * * umask 002; /path/to/script
即使它是一个python脚本,这也会起作用,因为os.umask
的默认值继承自shell的umask。
但是,在/etc/cron.hourly
等中放置python脚本,除了在python脚本本身之外,没有办法设置umask:
import os
os.umask(002)