2015-11-01 104 views
0

我正在運行測試的每小時cron作業。這項工作運行一個名爲「rotateLogs」的Python文件。 Cron不能使用擴展名,所以文件的第一行是#!/ usr/bin/python。這個python文件(fileA)然後在計算機的其他地方調用另一個python文件(fileB)。 fileB使用時間戳等登錄到日誌文件。但是,當fileB作爲cron作業通過fileA運行時,它會將其日誌文件創建爲rw-r-r--文件。Cron作業文件創建 - 創建的文件權限

問題是,如果我然後嘗試登錄到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,我認爲這是根?

+1

嘗試'的umask 002' – Kenney

+0

我很欣賞的評論,但這個沒」工作。我在/ etc/profile和〜/ .bashrc中將它設置爲002,但它仍然將該文件設置爲644. – WarSame

+0

我認爲如果您可以對問題進行如下處理,則可能會更容易回答:1) crontab行; 2)'rotateLogs'(.py)中的代碼調用'fileB',3)'fileB'中的代碼創建/附加日誌文件;可能還有4)cronjob的用戶/組/ shell(以及用戶/日誌文件組,如果不同)。它可能很簡單,比如使用'#!/ usr/bin/env python',或者在某處添加'chmod g + w logfile'或者''os.umask(002)'](http://stackoverflow.com /問題/ 10291131 /如何使用的-OS-的umask式的Python)。 – Kenney

回答

1

事實證明,cron不源的任何殼型材(/etc/profile~/.bashrc),所以將umask具有在正在由cron調用的腳本來進行設置。

當使用用戶級的crontab(crontab -e),umask的可簡單設置如下:

0 * * * * umask 002; /path/to/script 

,如果它是一個Python腳本,這會甚至工作,從的os.umask繼承缺省值外殼的umask。

但是,將一個python腳本/etc/cron.hourly等,有沒有辦法設置的umask除了在python腳本本身:

import os 
os.umask(002)