网站定时任务,动态定时任务

http://www.itjxue.com  2023-01-05 10:05  来源:未知  点击次数: 

谁能告诉我电脑怎么实现定时自动打开某个网页,然后自动点击网页中的一个按钮?

如果你会js的话建议使用 chrome插件?web-terminal??这个插件可以定义一些定时任务去指定网页执行一段js代码

使用方法:

安装插件

在任何一个网页连续按2下ctrl键 就能打开web-terminal

然后输入 js `console.log(123)` -u 这样就能打开百度网页

如何设置定时执行这段代码呢,可以使用cron命令

cron `00 50 22 * * *` "js `console.log(123)` -u " -a

此任务代表每天的22:50 分执行这段js代码 也就是定时打开百度网页了

如何在一个网站中定时执行一个任务

Quartz定时机制 首先导入jar包到程序内 quartz-all-1.6.0.jar 然后创建一个XML TimeConfig.xml 名字可以自己定义 //你要执行的任务类 //jar类 //将你的类添加到定时器当中 execute //定时执行类里面的哪个方法 0 0/5 * * * ? //定时的语法

各种ASP.NET定时执行任务解决方案收集

方法一

using System;

using System Data;

using System Configuration;

using System Collections;

using System Web;

using System Web Security;

using System Web SessionState;

using System Timers;

using System Net;

using System IO;

using System Text;

using System Threading;

namespace

{

public class Global : System Web HttpApplication

{

protected void Application_Start(object sender EventArgs e)

{

//定义定时器

System Timers Timer myTimer = new System Timers Timer( );

myTimer Elapsed += new ElapsedEventHandler(myTimer_Elapsed);

myTimer Enabled = true;

myTimer AutoReset = true;

}

void myTimer_Elapsed(object source ElapsedEventArgs e)

{

try

{

Log SaveNote(DateTime Now ToString( yyyy MM dd HH:mm:ss ) + :AutoTask is Working! );

YourTask();

}

catch (Exception ee)

{

Log SaveException(ee);

}

}

void YourTask()

{

//在这里写你需要执行的任务

}

protected void Application_End(object sender EventArgs e)

{

Log SaveNote(DateTime Now ToString( yyyy MM dd HH:mm:ss ) + :Application End! );

//下面的代码是关键 可解决IIS应用程序池自动回收的问题

Thread Sleep( );

//这里设置你的web地址 可以随便指向你的任意一个aspx页面甚至不存在的页面 目的是要激发Application_Start

string url =

HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest Create(url);

HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest GetResponse();

Stream receiveStream = myHttpWebResponse GetResponseStream();//得到回写的字节流

}

}

}

原理 Global asax 可以是中应用程序或会话事件处理程序 我们用到了Application_Start(应用程序开始事件)和Application_End(应用程序结束事件) 当应用程序开始时 启动一个定时器 用来定时执行任务YourTask()方法 这个方法里面可以写上需要调用的逻辑代码 可以是单线程和多线程 当应用程序结束时 如IIS的应用程序池回收 让去访问当前的这个web地址 这里需要访问一个aspx页面 这样就可以重新激活应用程序 Log类是一个记录日志的一个类 下面是测试时生成的日志信息

================================================================

: : :AutoTask is Working!

: : :AutoTask is Working!

: : :AutoTask is Working!

: : :Application End!

: : :AutoTask is Working!

: : :AutoTask is Working!

从日志中发现 当手动回收IIS的应用程序池之后 计划任务还在执行 说明我们的目的达到了

如果将Application_End中的代码注释掉 会发现Application End之后 计划任务停止工作了 如下

================================================================

: : :AutoTask is Working!

: : :AutoTask is Working!

: : :AutoTask is Working!

: : :Application End!

局限性 可以解决应用程序池自动或者手动回收 但是无法解决IIS重启或者web服务器重启的问题 当然这种情况出现的时候不多 而且如果有人访问你的网站的时候 又会自动激活计划任务了

方案二

%@ Application Language= C# %

%@ import Namespace= System IO %

script runat= server

void Application_Start(object sender EventArgs e)

{

// 在应用程序启动时运行的代码

System Timers Timer myTimer = new System Timers Timer( );

myTimer Elapsed += new System Timers ElapsedEventHandler(OnTimedEvent);

myTimer Interval = ;

myTimer Enabled = true;

}

void Application_End(object sender EventArgs e)

{

//? 在应用程序关闭时运行的代码

}

void Application_Error(object sender EventArgs e)

{

// 在出现未处理的错误时运行的代码

}

void Session_Start(object sender EventArgs e)

{

// 在新会话启动时运行的代码

}

void Session_End(object sender EventArgs e)

{

// 在会话结束时运行的代码

// 注意: 只有在 nfig 文件中的 sessionstate 模式设置为

// InProc 时 才会引发 Session_End 事件 如果会话模式设置为 StateServer

// 或 SQLServer 则不会引发该事件

}

private static void OnTimedEvent(object source System Timers ElapsedEventArgs e)

{

//间隔时间执行某动作

//指定日志文件的目录

string fileLogPath = AppDomain CurrentDomain BaseDirectory + SystemLog ;

string fileLogName = SoftPrj_CN_ + DateTime Now ToLongDateString() + _log txt ;

//定义文件信息对象

FileInfo finfo = new FileInfo(fileLogPath + fileLogName);

//创建只写文件流

using (FileStream fs = finfo OpenWrite())

{

//根据上面创建的文件流创建写数据流

StreamWriter strwriter = new StreamWriter(fs);

//设置写数据流的起始位置为文件流的末尾

strwriter BaseStream Seek( SeekOrigin End);

//写入错误发生时间

strwriter WriteLine( 发生时间: + DateTime Now ToString());

//写入日志内容并换行

//strwriter WriteLine( 错误内容: + message);

strwriter WriteLine( 错误内容: );

//写入间隔符

strwriter WriteLine( );

strwriter WriteLine();

//清空缓冲区内容 并把缓冲区内容写入基础流

strwriter Flush();

//关闭写数据流

strwriter Close();

fs Close();

}

}

/script

方案三

%@ Application Language= C# %

%@ Import Namespace= System IO %

%@ Import Namespace= System Threading %

script RunAt= server

string LogPath;

Thread thread;

void WriteLog()

{

while (true)

{

StreamWriter sw = new StreamWriter(LogPath true Encoding UTF );

sw WriteLine(thread Name + : + DateTime Now ToString());

sw Close();

Thread CurrentThread Join( * );//阻止 秒

}

}

void Application_Start(object sender EventArgs e)

{

LogPath = HttpContext Current Server MapPath( log txt );??????? //在应用程序启动时运行的代码

thread = new Thread(new ThreadStart(WriteLog));

thread Name = 写登录日志线程 ;

thread Start();

}

void Application_End(object sender EventArgs e)

{

//? 在应用程序关闭时运行的代码

}

void Application_Error(object sender EventArgs e)

{

// 在出现未处理的错误时运行的代码

}

void Session_Start(object sender EventArgs e)

{

// 在新会话启动时运行的代码

}

void Session_End(object sender EventArgs e)

{

// 在会话结束时运行的代码

// 注意: 只有在 nfig 文件中的 sessionstate 模式设置为

// InProc 时 才会引发 Session_End 事件 如果会话模式设置为 StateServer

// 或 SQLServer 则不会引发该事件

}

lishixinzhi/Article/program/net/201311/13724

iis发布的网站怎么跑定时任务

可以再全局变量实现,不打开页面也可以

Global.asax

C# code?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

void Application_Start(object sender, EventArgs e)

{

// 在应用程序启动时运行的代码 这里设置34个小时间隔 122400000 300000

System.Timers.Timer myTimer = new System.Timers.Timer(122400000);//修改时间间隔

//关联事件

myTimer.Elapsed += new System.Timers.ElapsedEventHandler(AutoExec);

myTimer.AutoReset = true;

myTimer.Enabled = true;

}

/// summary

/// 定时执行的代码

/// /summary

private void AutoExec(object sender,System.Timers.ElapsedEventArgs e)

{

var webNewsAction = new WebApp.Common.WebNewsCollector();//新闻采集

webNewsAction.AutoInsert();

}

void Application_End(object sender, EventArgs e)

{

// 在应用程序关闭时运行的代码

//如果出错,删除下面代码

//下面的代码是关键,可解决IIS应用程序池自动回收的问题

System.Threading.Thread.Sleep(1000);

////这里设置你的web地址,可以随便指向你的任意一个aspx页面甚至不存在的页面,目的是要激发Application_Start

////string url = "";

string url = "";

System.Net.HttpWebRequest myHttpWebRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);

System.Net.HttpWebResponse myHttpWebResponse = (System.Net.HttpWebResponse)myHttpWebRequest.GetResponse();

System.IO.Stream receiveStream = myHttpWebResponse.GetResponseStream();//得到回写的字节流

//在此添加其它代码

}

几种主流的分布式定时任务,你知道哪些?

自从JDK1.5之后,提供了 ScheduledExecutorService 代替TimerTask来执行定时任务,提供了不错的可靠性。

Spring Framework 自带定时任务,提供了cron表达式来实现丰富定时任务配置。新手推荐使用 这个网站来匹配你的 cron表达式 。

单点的定时服务在目前微服务的大环境下,应用场景越来越局限,所以尝鲜一下分布式定时任务吧。

相较于之前两种方式,这种基于Redis的实现可以通过多点来增加定时任务,多点消费。但是要做好防范重复消费的准备。

将定时任务存放到ZSet集合中,并且将过期时间存储到ZSet的Score字段中,然后通过一个循环来判断当前时间内是否有需要执行的定时任务,如果有则进行执行。

具体实现代码如下:

适用场景如下:

优势是:

默认情况下Redis是不开启键空间通知的,需要我们通过 config set notify-keyspace-events Ex 的命令手动开启。开启之后定时任务的代码如下:

Spring会监听符合以下格式的Redis消息

基于Redis的定时任务能够适用的场景也比较有限,但实现上相对简单,但对于功能幂等有很大要求。从使用场景上来说,更应该叫做延时任务。

场景举例:

优劣势是:

将定时任务作为单独的服务,遏制了重复消费,独立的服务也有利于扩展和维护。

依赖于MySQL,使用相对简单,可多节点部署,通过竞争数据库锁来保证只有一个节点执行任务。没有图形化管理页面,使用相对麻烦。

依赖于Zookeeper,通过zookeeper的注册与发现,可以动态的添加服务器。

依赖于Zookeeper,集群部署,可以动态的添加服务器。可以手动增加定时任务,启动和暂停任务。

国产,依赖于MySQL,基于竞争数据库锁保证只有一个节点执行任务,支持水平扩容。可以手动增加定时任务,启动和暂停任务。

微服务下,推荐使用xxl-job这一类组件服务将定时任务合理有效的管理起来。而单点的定时任务有其局限性,适用于规模较小、对未来扩展要求不高的服务。

相对而言,基于spring task的定时任务最简单快捷,而xxl-job的难度主要体现在集成和调试上。无论是什么样的定时任务,你都需要确保:

中间件可以将服务解耦,但增加了复杂度

(责任编辑:IT教学网)

更多

推荐浏览器文章