發現自己好像沒有用過supervisor哎。是以就來用一用咯。正好想重學下Bash。
在
/etc/supervisor/conf.d/
檔案夾下面添加一個新的配置檔案叫做
chshmod.conf
内容如下:
[program:chshmod]
command=/data/cronpy/changemod.py /data/shcode/
然後重新開機supervisord 使用指令
/etc/init.d/supervisor restart
結果卻發現出問題了。
錯誤描述如下:
chshmod FATAL command at '/data/cronpy/changemod.py' is not executable
說什麼
/data/cronpy/changemod.py not executeable
第一我的的首先想法
changemod.py
的權限不對?是不是
777
的權限,如果不是,給個
777
的權限試下
root@ubuntu:/etc/supervisor/conf.d# ls -l /data/cronpy/changemod.py
-rw-r--r-- root root 月 : /data/cronpy/changemod.py
給個
777
的權限,然後重新開機下
chshmod
程式
root@ubuntu:/etc/supervisor/conf.d# supervisorctl
chshmod FATAL command at '/data/cronpy/changemod.py' is not executable
supervisor> restart chshmod
chshmod: ERROR (not running)
chshmod: ERROR (abnormal termination)
卻發現還是有問題啊,wtf
supervisor> status
chshmod FATAL Exited too quickly (process log may have details)
要我去找process log但是為什麼 supervisorctl不能檢視日志呢,怨念.
root@ubuntu:/etc/supervisor/conf.d# cd /var/log/supervisor/
chshmod-stderr---supervisor-WJDFyf.log
chshmod-stdout---supervisor-N0iSUW.log
supervisord.log
root@ubuntu:/etc/supervisor/conf.d# cd /var/log/supervisor/
root@ubuntu:/var/log/supervisor# cat chshmod-stderr---supervisor-WJDFyf.log
supervisor: couldn't exec /data/cronpy/changemod.py: ENOEXEC
supervisor: child process was not spawned
supervisor: couldn't exec /data/cronpy/changemod.py: ENOEXEC
supervisor: child process was not spawned
supervisor: couldn't exec /data/cronpy/changemod.py: ENOEXEC
supervisor: child process was not spawned
supervisor: couldn't exec /data/cronpy/changemod.py: ENOEXEC
supervisor: child process was not spawned
supervisor: couldn’t exec /data/cronpy/changemod.py: ENOEXEC
supervisor: child process was not spawned
這是什麼意思啊,有病?
搜尋一下呗。
搜尋的結果,說好像是我配置有問題
command
寫得有問題
聽網上的意思是說把
/data/cronpy/changemod.py /data/shcode/
替換成
/data/cronpy/changemod.py /data/shcode/
修改之後,再重新開機
chshmod
root@ubuntu:/etc/supervisor/conf.d# supervisorctl
chshmod FATAL Exited too quickly (process log may have details)
supervisor> restart chshmod
chshmod: ERROR (not running)
chshmod: ERROR (abnormal termination)
supervisor> status
chshmod BACKOFF Exited too quickly (process log may have details)
還是有錯啊,要報警了啊
錯誤日志如下:
supervisor: couldn't exec /data/cronpy/changemod.py: ENOEXEC
supervisor: child process was not spawned
supervisor: couldn't exec /data/cronpy/changemod.py: ENOEXEC
supervisor: child process was not spawned
supervisor: couldn't exec /data/cronpy/changemod.py: ENOEXEC
supervisor: child process was not spawned
又是這個錯誤。煩
難道和我的
py
檔案有關
# coding:utf-8
import logging
import time
import sys
import os
import sh
from watchdog.events import LoggingEventHandler, FileSystemEventHandler
__author__ = 'root'
from watchdog.observers import Observer
def is_file_hidden(path):
basename = os.path.basename(path)
return basename.startswith('.')
class ChmodEventHandler(FileSystemEventHandler):
def on_created(self, event):
super(ChmodEventHandler, self).on_created(event)
created_path = event.src_path
if not is_file_hidden(created_path):
sh.chmod('777', created_path)
logging.info("{ech1}:change {0} mod to 777".format(created_path, self.__class__.__name__))
def chmod(path):
observer = Observer()
logging.basicConfig(level=logging.INFO,
format='%(asctime)s-%(message)s',
datefmt='%Y-%m-%d %H:%M:%S')
logging_handler = LoggingEventHandler()
observer.schedule(logging_handler, path, recursive=True)
observer.schedule(ChmodEventHandler(), path, recursive=True)
observer.start()
try:
while :
time.sleep()
except KeyboardInterrupt:
observer.stop()
observer.join()
if __name__ == "__main__":
path = sys.argv[] if len(sys.argv) > else '.'
chmod(path)
好像是沒加執行環境的鍋?
加上
#!/usr/bin/python
再重新開機試一下:
supervisor> restart chshmod
chshmod: ERROR (not running)
chshmod: started
supervisor> status chshmod
chshmod RUNNING pid 5094, uptime 0:00:11
好了!!
good job