2015-02-23 3 views
0

Я разработал Quartz.Net окна обслуживания для выполнения запланированных заданий, и я создал SQLite jobstore для того, чтобы работать. Вот настройки моей AdoJobStore:Quartz.Net служба планировщика не запускается автоматически при запуске

# SQLite settings 
quartz.jobStore.type = Quartz.Impl.AdoJobStore.JobStoreTX, Quartz 
quartz.jobStore.misfireThreshold = 60000 
quartz.jobStore.lockHandler.type = Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz 
quartz.jobStore.useProperties = true 
quartz.jobStore.dataSource = default 
quartz.jobStore.tablePrefix = qrtz_ 
quartz.jobStore.driverDelegateType = Quartz.Impl.AdoJobStore.SQLiteDelegate, Quartz 
quartz.dataSource.default.provider = SQLite-10 
quartz.dataSource.default.connectionString = Data Source=.\jobs.db;Version=3 

Прежде чем дать вам головную боль, я должен сказать, что это рабочее решение! Это означает, что магазин работ работает просто отлично! Каждое задание состоит из запуска файла .exe, который будет получать свои параметры из базы данных SQL Server, используя строку соединения, которая хранится в текстовом файле.

Так что если услуга запускается автоматически, все работает нормально.

После установки службы Windows мы даем ей имя пользователя, которое имеет доступ к целевой базе данных в службе . Вход в систему вкладка. Мы установили сервис для запуска автоматически (и попробовали режим Automatic Delayed). На вкладке Recovery мы также сообщим его Перезагрузите в случае его сбоя.

Однако обслуживание, похоже, не начинается само по себе на некоторых машинах, и это заставило меня задуматься довольно долго. На машинах с отказом, это то, что мои журналы службы, когда он не запускается: установлена ​​

2015-02-13 15:09:15,674 [1] ERROR Quartz.Server.QuartzServer [(null)] - Server initialization failed:Unable to bind scheduler to remoting. 
Quartz.SchedulerException: Unable to bind scheduler to remoting. ---> System.Net.Sockets.SocketException: No such host is known 
    at System.Net.Dns.InternalGetHostByName(String hostName, Boolean includeIPv6) 
    at System.Net.Dns.GetHostEntry(String hostNameOrAddress) 
    at System.Runtime.Remoting.Channels.CoreChannel.GetMachineIp() 
    at System.Runtime.Remoting.Channels.Tcp.TcpServerChannel.SetupMachineName() 
    at System.Runtime.Remoting.Channels.Tcp.TcpServerChannel..ctor(IDictionary properties, IServerChannelSinkProvider sinkProvider, IAuthorizeRemotingConnection authorizeCallback) 
    at System.Runtime.Remoting.Channels.Tcp.TcpChannel..ctor(IDictionary properties, IClientChannelSinkProvider clientSinkProvider, IServerChannelSinkProvider serverSinkProvider) 
    at Quartz.Simpl.RemotingSchedulerExporter.RegisterRemotingChannelIfNeeded() 
    at Quartz.Simpl.RemotingSchedulerExporter.Bind(IRemotableQuartzScheduler scheduler) 
    at Quartz.Core.QuartzScheduler.Bind() 
    at Quartz.Core.QuartzScheduler.Initialize() 
    --- End of inner exception stack trace --- 
    at Quartz.Core.QuartzScheduler.Initialize() 
    at Quartz.Impl.StdSchedulerFactory.Instantiate() 
    at Quartz.Impl.StdSchedulerFactory.GetScheduler() 
    at Quartz.Server.QuartzServer.Initialize() [See nested exception: System.Net.Sockets.SocketException (0x80004005): No such host is known 
    at System.Net.Dns.InternalGetHostByName(String hostName, Boolean includeIPv6) 
    at System.Net.Dns.GetHostEntry(String hostNameOrAddress) 
    at System.Runtime.Remoting.Channels.CoreChannel.GetMachineIp() 
    at System.Runtime.Remoting.Channels.Tcp.TcpServerChannel.SetupMachineName() 
    at System.Runtime.Remoting.Channels.Tcp.TcpServerChannel..ctor(IDictionary properties, IServerChannelSinkProvider sinkProvider, IAuthorizeRemotingConnection authorizeCallback) 
    at System.Runtime.Remoting.Channels.Tcp.TcpChannel..ctor(IDictionary properties, IClientChannelSinkProvider clientSinkProvider, IServerChannelSinkProvider serverSinkProvider) 
    at Quartz.Simpl.RemotingSchedulerExporter.RegisterRemotingChannelIfNeeded() 
    at Quartz.Simpl.RemotingSchedulerExporter.Bind(IRemotableQuartzScheduler scheduler) 
    at Quartz.Core.QuartzScheduler.Bind() 
    at Quartz.Core.QuartzScheduler.Initialize()] 

Службы на хосте 127.0.0.1 порта 555 и, кажется, не нужна зависимость, потому что он работает в некоторых других машинах.

У меня такое ощущение, что служба пытается начать работу до того, как будет доступ к базе данных или до того, как будет установлен хост TCP. Но если это так, то почему он работает на других устройствах?

Я задал тот же вопрос раньше, но не смог найти рабочий ответ. Любая помощь от Quartz.Net dev team или Службы Windows.

ответ

1

Отказ от ответственности. Я не являюсь частью команды разработчиков Quartz.net, и я не эксперт по услугам для Windows

установлен сервис на хост 127.0.0.1 порт 555 и, похоже, не нужна зависимость, потому что он работает под некоторые другие машины.

Ваши аргументы ложны. Может случиться так, что требуемые службы только произойдут, чтобы всегда запускаться на других машинах, но без установки зависимости это не гарантируется.

Таким образом, поскольку вы получаете ошибку DNS, я хотел бы предложить вам начать с установки вашей службы сделать это зависит от DNSCache и Tcpip.

+0

имеет смысл. Я должен попробовать это. Сообщите, если это сработает. – Disasterkid

+0

У меня нет служб с именами, о которых вы упомянули выше, но я вижу «TCP/IP NETBIOS Helper» и «DNS-клиент» в моих установленных сервисах. – Disasterkid

+1

'Dnscache' - это имя службы, а« DNS-клиент »- это отображаемое имя для той же услуги. 'lmhosts' - это имя службы для« TCP/IP NETBIOS Helper », но я не уверен, потребуется ли NetBios. 'Tcpip' на самом деле является устройством, а не сервисом, но он все равно может быть включен как зависимость. – sgmoore

Смежные вопросы