天天看點

初試supervisor

發現自己好像沒有用過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