2017-07-19 52 views
1

我想在Ubuntu中创建服务,但出现错误。Linux系统服务错误(Ubuntu)

我写的代码 -

低于在FileSystemWatcher.py

import requests 
import json 
import logging 
import sys 
import os 
import datetime 
from watchdog.events import PatternMatchingEventHandler 


class DirectoryChangedHandler(PatternMatchingEventHandler): 

    patterns = ["*.json","*.csv"] 

    logFileName = datetime.datetime.now().strftime('%Y%m%d_log.log') 
    script_dir = os.path.dirname(__file__) # <-- absolute dir the script is in 
    rel_path = "log/"+logFileName 
    abs_logfile_path = os.path.join(script_dir, rel_path) 

    appConfigFilePath = os.path.abspath('config/app_config.json') 
    with open(appConfigFilePath) as data_file: 
     config = json.load(data_file) 
    logging.basicConfig(filename=abs_logfile_path, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", level=logging.NOTSET) 

    def process(self, event): 

     print event.src_path, event.event_type 
     try: 

      filelist = [('files', open(event.src_path, 'rb'))] 
      postUrl = self.config["apiBaseUrl"].encode('utf-8')+self.config["fileUplaodApiUrl"].encode('utf-8') 
      uploadResponse = requests.post(postUrl, files=filelist) 
      if uploadResponse.status_code == 200: 
       print "Upload Successful - ", event.src_path 
      else: 
       print "Upload Failed - ", event.src_path 
     except: 
      print "Unexpected error:", sys.exc_info()[0] 
      pass 

    def on_modified(self, event): 
     self.process(event) 

    def on_created(self, event): 
     self.process(event) 

workflow.py-

#!/usr/bin/python2.7 

import sys 
import time 
from watchdog.observers import Observer 

import FileSystemWatcher as fSystemWatcher 


if __name__ == '__main__': 
    args = sys.argv[1:] 
    observer = Observer() 
    observer.schedule(fSystemWatcher.DirectoryChangedHandler(), path=args[0] if args else '.', recursive=True) 
    observer.start() 

    try: 
     while True: 
      time.sleep(1) 
    except KeyboardInterrupt: 
     observer.stop() 

    observer.join() 

(/lib/systemd/system/FileWatcherSystemd.service)

[Unit] 
Description=FileChangeService 

[Service] 
Type=forking 
WorkingDirectory= /home/ashish/Documents/FileSystemWatcher 
ExecStart= /home/ashish/Documents/FileSystemWatcher/workflow.py 
Restart=on-failure 

[Install] 
WantedBy=multi-user.target 

但我正在逐渐以下无错误

FileWatcherSystemd.service - FileChangeService加载:加载 (/lib/systemd/system/FileWatcherSystemd.service;启用;供应商 预设:启用)激活:无效(死亡)(结果:退出代码)因为 Wed 2017-07-19 10:44:39 IST; 8分钟前处理:6552 ExecStart = /家庭/阿希什/文档/ FileSystemWatcher的/ FileSystemWatcher.py (代码=退出,状态= 203/EXEC)主PID:6552(代码=退出, 状态= 203/EXEC)

Jul 19 10:44:39 Ashish-PC systemd [1]:FileWatcherSystemd.service:单元 进入失败状态。 Jul 19 10:44:39 Ashish-PC systemd [1]: FileWatcherSystemd.service:失败,结果为'退出代码'。 7月19日 10:44:39 Ashish-PC systemd [1]:FileWatcherSystemd.service:服务 延迟时间结束,调度重启。 7月19日10:44:39 Ashish-PC systemd [1]:停止FileChangeService。 Jul 19 10:44:39 Ashish-PC systemd [1]:FileWatcherSystemd.service:快速重复启动请求 。 7月19日10:44:39 Ashish-PC systemd [1]:无法启动 FileChangeService。

我不知道我在FileSytemWatcher.pyFileWatcherSystemd.service

回答

1

试着改变你的业务类型为简单做错了。所以

type=simple 

你的脚本似乎并没有分叉和退出。如果您的服务类型是分叉的,systemd会假定已启动的进程分叉,并在后台运行并退出。它会等到您的脚本完成运行。

您的脚本不会退出,并且systemd会检测到这种情况并为您提供超时错误。您的脚本似乎处于无限循环中,等待键盘中断。这种脚本可以运行为“简单”。这意味着systemd只是在后台启动脚本,并随着启动顺序继续前进,无需等待任何内容。

+0

谢谢@Hannu。现在我的服务正在使用Type = simple –