服务器定时执行js脚本

前段时间买了一个腾讯云的linux(centos)服务器,打算在服务器上放一个js脚本,每天定时执行一次。

之前想过要写一个html,把js的脚本直接写进去,但是发现linux服务器并不能以打开网页的当时执行脚本(查了一些资料,发现一般都是在服务器上部署静态页面,还是需要我手动去访问,不能自动执行)。
后来发现可以使用node执行纯js脚本,不需要写在html里边,这样一来,只要在服务器上设定好每天自动执行node指令就可以了。

实操:

  1. 安装node,配置环境。
    进入node官网,https://nodejs.org/en/download/
    在这里插入图片描述
    选择最新版本的,右键-复制链接地址
    https://nodejs.org/dist/v14.15.1/node-v14.15.1-linux-x64.tar.xz
    在命令行中,进入到想要安装node的文件夹(自己新建一个)
cd /usr/local/node  # 我安装的目录
wget https://nodejs.org/dist/v14.15.1/node-v14.15.1-linux-x64.tar.xz # 下载已经编译好的版本,可以省去编译过程
tar -xvJf node-v14.15.1-linux-x64.tar.xz # 解压
cd node-v14.15.1-linux-x64 # 进入解压后的文件
./bin/node -v # 执行node命令 查看版本

在这里插入图片描述
解压文件的 bin 目录底下包含了 node、npm 等命令,使用 ln 命令来设置软连接:

ln -s /usr/local/node/node-v14.15.1-linux-x64/bin/npm   /usr/local/bin/ 
ln -s /usr/local/node/node-v14.15.1-linux-x64/bin/node  /usr/local/bin/

也可直接设置环境变量:在 etc/profile 最下边加上

# nodejs环境变量
export NODE_HOME=/usr/local/node/node-v14.15.1-linux-x64
export PATH=$NODE_HOME/bin:$PATH

这样,在任何路径下,都可以直接使用node指令

  1. 脚本
    js脚本原本是在写在html里边的,如果想用node执行,需要有所修改。

首先,由于脚本中需要使用jquery中的$,需要引入jsdom,jquery

# 进入js脚本所在目录
cd usr/script # 我的脚本路径
npm install jquery # 安装jquery
npm install jsdom # 安装jsdom

之后,编辑脚本

vim fangyi.js
    //在脚本最开始加上
	const jsdom = require('jsdom');
	const {JSDOM} = jsdom;
	const {document} = (new JSDOM('<!doctype html><html><body></body></html>')).window;
	global.document = document;
	const window = document.defaultView;
	const $ = require('jquery')(window);

此外,由于想要脚本自动执行,通过console.log()打印的控制台显然不太合理,因此考虑将脚本执行的信息打印到日志文件中,方法很简单

在脚本最开始加上:

		const fs = require('fs');
		const options = {
 			 flags: 'a',     // append模式
 			 encoding: 'utf8',  // utf8编码
		};
		let file = fs.createWriteStream('/usr/script/dailyLog.txt',options);		

		// 创建logger,用于输出到log文件
		let logger = new console.Console(file,file);

		//使用方法,即可写入到日志文件中
		logger.log("脚本开始")
  1. 服务器定时
    编辑crontab,可以编辑定时任务
crontab -l # 查看任务列表
crontab -e # 编辑任务
# 加入一个新任务(每天10点10分执行一次js脚本)
10 10 * * * /usr/local/node/node-v14.15.1-linux-x64/bin/node /usr/script/fangyi.js

具体crontab的格式,自行查找即可。

注:
编辑crontab时,一般的直觉是直接使用 node+脚本 就行,但是因为crontab有自己的环境,与前边配置的系统环境变量不同,所以如果想要在crontab中直接使用node指令,需要在/etc/crontab中加入node的安装路径。
但是我在实际操作时,在/etc/crontab加入了node路径,但是却执行不了,所以简单粗暴直接写的是node路径。出现这个问题可能是哪里写的不对,大家可以试试修改/etc/crontab的方式。

  1. 到此,服务器已经可以定时执行js脚本了,可以在对应的输出日志文件中查看执行结果。

参考:

  • node安装:https://www.runoob.com/nodejs/nodejs-install-setup.html

  • node环境使用jquery:https://www.itread01.com/content/1542875725.html

  • nodejs日志打印:https://www.jb51.net/article/138984.htm

  • crontab环境变量:https://blog.csdn.net/weixin_36343850/article/details/79217611

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用 JavaScript 写一个定时抢购脚本可以通过使用 `setInterval` 方法来实现。`setInterval` 方法可以在指定的时间间隔内重复执行一个函数。 举个例子,下面的代码会在每隔 5 秒钟调用 `placeOrder` 函数进行一次抢购: ``` function placeOrder() { // 抢购代码 console.log("Attempting to place order!"); } setInterval(placeOrder, 5000); ``` 需要注意的是, 这只是一个非常简单的示例, 实际抢购时需要考虑网络请求,页面交互,等等的问题. 另外, 在实际的抢购中, 您需要注意遵循抢购网站的政策和服务条款, 以及避免进行滥用和违法行为. ### 回答2: 使用JS编写定时抢购脚本的关键是获取商品的抢购时间,并在抢购时间到达时立即执行购买操作。下面是一个简单的示例: ```javascript // 获取当前时间 var currentTime = new Date(); // 设置抢购时间(假设为下一个小时的12:00:00) var targetTime = new Date(currentTime.getFullYear(), currentTime.getMonth(), currentTime.getDate(), currentTime.getHours() + 1); targetTime.setHours(12, 0, 0); // 计算距离抢购时间的毫秒数 var countdown = targetTime.getTime() - currentTime.getTime(); // 定时器函数,在抢购时间到达时执行购买操作 function purchase() { // 在此处编写购买操作的代码 console.log('进行购买操作'); } // 设置定时器,在倒计时结束时执行购买操作 setTimeout(purchase, countdown); ``` 以上代码通过获取当前时间并计算距离抢购时间的毫秒数,然后使用setTimeout函数设置定时器,在抢购时间到达时执行购买操作。可以根据实际情况自定义购买操作的代码,例如向服务器发送购买请求、添加商品到购物车等等。这样就可以实现一个简单的定时抢购脚本
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值