在服务器上放一个js脚本,每天定时执行一次。

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

实操:


  1. 安装node,配置环境。
    进入node官网, https://nodejs.org/en/download/

  2. 在这里插入图片描述

  3. 选择最新版本的,右键-复制链接地址
      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命令 查看版本1.2.3.4.5.

在这里插入图片描述


解压文件的 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/1.2.

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

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

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

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

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

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

之后,编辑脚本

vim fangyi.js1.
//在脚本最开始加上
	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);1.2.3.4.5.6.7.

此外,由于想要脚本自动执行,通过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.2.3.4.5.6.7.8.9.10.11.12.
  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.js1.2.3.4.

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

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

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