有时我们程序需要不断处理一件事情
如果实时性要求很高,如几秒内,那用程序启动线程循环处理是个不错的选择。
但如果实时性要求不是很高,分钟级或以下,那可以选择换个方式,使用linux crontab
好处:只要linux不挂,程序就可以正常运行,linux服务器重启后服务也不受影响。比上种方式更稳定,编程更简单。
linuxcrontab设置
在命令端输入crontab -e,加入定时调用
*/5 * * * * /opt/consumegradesql/run_add.sh
linux脚本run_add.sh:
注意:crontab,在设定环境变量java_home时必须自己在脚本里设定,如果是直接./执行脚本会查找系统的环境变量。
#!/bin/bash export JAVA_HOME=/opt/jdk1.6.0_21 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar baseDirForScriptSelf=$(cd "$(dirname "$0")"; pwd) LIB_CP=:""$baseDirForScriptSelf""/WEB-INF/classes flist=$baseDirForScriptSelf""/WEB-INF/lib/*.jar; for i in $flist; do LIB_CP=$LIB_CP":"$i; done export LIB_CP CP=${CLASSPATH}${LIB_CP} java -cp ${CP} -Xms1024m -Xmx1024m com.jd.consume.link.AddConsumeJob
程序主函数:
/** *负责job启动 */ public static void main(String[] args) { SpringUtil springUtil = new SpringUtil("spring/spring-config.xml"); AddConsumeJob addConsumeJob = springUtil.getBean("addConsumeJob"); addConsumeJob.setAlwaysrun(false); addConsumeJob.start(); LogUtil.error(addConsumeJob.getLogName(), "main End"); System.exit(1);//防止还有其它线程 }
相关代码,要加入防止重复启动代码(通过端口号)
/** * 启动后不退出 */ public void start() { if (!alwaysrun) {//如果是执行完就退出的job try { SocketUtil.bindPort(port); } catch (IOException e) { LogUtil.error(getLogName(), getLogName() + "Bind port:" + port + " error!", e); } LogUtil.error(getLogName(), getLogName() + "Bind port:" + port); countDownLatch = new CountDownLatch(threadSize); } //初始化相应线程 for (int thNo = 1; thNo <= threadSize; thNo++) { jobRunables.add(getJobRunable(thNo)); } //启动相应服务线程 ExecutorService executorService = Executors.newFixedThreadPool(threadSize); for (JobRunable jobRunable : jobRunables) { executorService.execute(jobRunable); } executorService.shutdown(); if (!alwaysrun) {//如果是执行完就退出的job try { countDownLatch.await(); } catch (InterruptedException e1) { LogUtil.error(getLogName(), getLogName() + "threadLatch.await()", e1); } SocketUtil.closeSocket(); LogUtil.error(getLogName(), getLogName() + "mainEnd"); } }
public class SocketUtil { protected final static Logger log = LoggerFactory.getLogger(SocketUtil.class); private static ServerSocket serverSocket; public static void bindPort(int port) throws IOException { SocketUtil.serverSocket = new ServerSocket(port); } public static void closeSocket() { try { SocketUtil.serverSocket.close(); } catch (IOException e) { log.error("close socket error", e); } } }
附:linux端口号
- 1--1023 系统保留,只能由root用户使用
- 1024---4999 由客户端程序自由分配
- 5000---65535 由服务器端程序自由分配
相关推荐
包括在 /etc/rc.d/rc.local 中增加启动命令、将 apache 注册为系统服务、在 Red Hat Linux 中自动运行程序、登录时自动运行程序、退出登录时自动运行程序、定期自动运行程序和定时自动运行程序等多种方法。...
Crontab 是 Linux 系统中一个非常重要的工具,可以用来定时执行特定的命令或程序。它允许用户在指定的时间点执行特定的任务,从而实现自动化管理和备份等功能。 Crontab 的基本语法是以五个星号(*)分隔的六个字段...
Linux 自动启动程序设置方法 ...本文介绍了在 Linux 下设置开机自动启动程序的方法,包括开机启动时自动运行程序、登录时自动运行程序、退出登录时自动运行程序、定期自动运行程序和定时自动运行程序等方面的知识点。
Linux 下设置开机自动启动程序的方法可以分为五类:开机启动时自动运行程序、登录时自动运行程序、退出登录时自动运行程序、定期自动运行程序、定时自动运行程序。 开机启动时自动运行程序 在 Linux 下,可以通过...
使用 sysv-rc-conf 配置一下启动服务,即可实现开机启动时自动运行程序。 UBUNTU 添加程序开机自动启动可以通过多种方法实现,包括开机启动时自动运行程序、登录时自动运行程序、退出登录时自动运行程序、定期自动...
总的来说,Linux下的shell自启动程序通过利用System V init、systemd或cron等机制,使得系统在启动时能够自动运行特定的shell脚本,从而实现服务自动化和简化系统维护。理解这些原理和操作方法对于Linux系统管理员来...
Linux定时执行程序,尤其是通过Crontab实现自动化任务,是一种常用的方法来确保系统按照特定的时间间隔执行特定的任务。Crontab是Unix/Linux操作系统中的一个守护进程,它允许用户定义一系列的任务,这些任务会在...
在Linux系统管理中,计划任务服务是不可或缺的一部分,它允许系统在特定...正确理解和使用这两个命令,可以帮助你更好地管理Linux系统,实现服务的自动化启停,执行定时的维护任务,以及执行其他基于时间的自动化流程。
工具方面,有一些专门用于管理和控制自动启动程序的应用,比如Windows的任务管理器和计划任务,Linux的`systemctl`和`crontab`,以及Mac的`launchctl`。这些工具可以帮助用户查看、添加、修改和删除自动启动项,方便...
需要注意的是,在使用 Crontab 的时候,要特别注意的是运行脚本中能够访问到的环境变量和当前测试环境中的环境变量未必一致,一个比较保险的做法是在运行的脚本程序中自行设置环境变量(export)。 在使用 Crontab ...
通过这些方法,可以实现不同的启动项需求,例如自动启动某些程序、实现用户登录时自动运行程序、退出登录时自动运行程序、定期自动运行程序等。 一、使用chkconfig命令 chkconfig命令可以用来查看在不同启动级别下...
linux 下服务器程序会因为各种原因dump掉,就会影响用户使用,这里提供一个简单的进程监控和重启功能。 实现原理: 由定时任务crontab调用脚本,脚本用ps检查进程是否存在,如果不存在则重启并写入日志。 crontab...
总的来说,设置Linux开机自动启动程序涉及对系统启动流程的理解,包括运行级别的概念以及如何使用不同的工具(如`rc.local`, `systemd`, `cron`, `at`)来管理这些程序。理解这些基础知识对于Linux系统的日常管理和...
在Linux系统中,设置开机自动启动程序是管理服务器和确保服务持续运行的关键步骤。下面将详细解释如何在Linux环境下配置自启动程序。 1. **开机启动时自动运行程序** Linux系统启动时,主进程`init`根据配置文件...
在Linux或Unix系统中,可以使用`/etc/rc.d`目录下的脚本、`/etc/init.d`服务、Systemd单元文件或crontab定时任务实现。 在进行程序自启动测试时,我们需要考虑以下几个关键点: 1. **兼容性测试**:确保程序能在...
在给定的描述中,我们看到如何使用`crontab`来实现特定的定时任务需求。 首先,我们需要理解`crontab`的工作原理。每个Linux用户都有自己的`crontab`配置,可以通过`crontab -l`命令查看当前用户已设定的任务。要...
在IT领域,定时启动程序是一种常见的自动化任务管理方式,它允许用户预设特定时间执行某个程序或任务,从而实现无人值守的操作。定时启动程序广泛应用于各种操作系统,包括Windows、Linux和Mac OS等,它们通常与任务...
在Linux系统中,自启动程序的管理是一项基础而重要的工作,它涉及到系统启动时的自动运行程序、用户登录时的自动执行程序、定期和定时执行程序以及服务的配置和管理。 首先,当Linux系统开机后,会进行硬件和设备...