「crontab转java」cron转换器

博主:adminadmin 2023-01-28 17:00:10 327

本篇文章给大家谈谈crontab转java,以及cron转换器对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

如何利用crontab执行java文件

噢,你把这个文件保存下来嘛。

然后你运行 crontab -e

然后在vi编辑器里输入

*/5 * * * * root ./temp.sh

然后保存就可以了。

crontab的具体用法我复一个文档给你。

噢,下午已有一个高手回答了,答得很简略也很实用。你可以听他的。

*************************************************************

linux 下的crontab如何写

wscdlzhom发布于 2008-2-24 | 439次阅读 字号: 大 中 小 (网友评论 0 条) 我要评论

crontab命令的功能是在一定的时间间隔调度一些命令的执行。在/etc目录下有一个crontab文件,这里存放有系统运行的一些调度程序。每个用户可以建立自己的调度crontab。

cron 的主配置文件是 /etc/crontab,它包括下面几行:

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/

# run-parts

01 * * * * root run-parts /etc/cron.hourly

02 4 * * * root run-parts /etc/cron.daily

22 4 * * 0 root run-parts /etc/cron.weekly

42 4 1 * * root run-parts /etc/cron.monthly

前四行是用来配置 cron 任务运行环境的变量。SHELL 变量的值告诉系统要使用哪个 shell 环境(在这个例子里是 bash shell);PATH 变量定义用来执行命令的路径。cron 任务的输出被邮寄给 MAILTO 变量定义的用户名。如果 MAILTO 变量被定义为空白字符串(MAILTO=""),电子邮件就不会被寄出。HOME 变量可以用来设置在执行命令或脚本时使用的主目录。

/etc/crontab 文件中的每一行都代表一项任务,它的格式是:

minute hour day month dayofweek command

minute — 分钟,从 0 到 59 之间的任何整数

hour — 小时,从 0 到 23 之间的任何整数

day — 日期,从 1 到 31 之间的任何整数(如果指定了月份,必须是该月份的有效日期)

month — 月份,从 1 到 12 之间的任何整数(或使用月份的英文简写如 jan、feb 等等)

dayofweek — 星期,从 0 到 7 之间的任何整数,这里的 0 或 7 代表星期日(或使用星期的英文简写如 sun、mon 等等)

command — 要执行的命令(命令可以是 ls /proc /tmp/proc 之类的命令,也可以是执行你自行编写的脚本的命令。)

在以上任何值中,星号(*)可以用来代表所有有效的值。譬如,月份值中的星号意味着在满足其它制约条件后每月都执行该命令。

整数间的短线(-)指定一个整数范围。譬如,1-4 意味着整数 1、2、3、4。

用逗号(,)隔开的一系列值指定一个列表。譬如,3, 4, 6, 8 标明这四个指定的整数。

正斜线(/)可以用来指定间隔频率。在范围后加上 / 意味着在范围内可以跳过 integer。譬如,0-59/2 可以用来在分钟字段定义每两分钟。间隔频率值还可以和星号一起使用。例如,*/3 的值可以用在月份字段中表示每三个月运行一次任务。

开头为井号(#)的行是注释,不会被处理。

如你在 /etc/crontab 文件中所见,它使用 run-parts 脚本来执行 /etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly 和 /etc/cron.monthly 目录中的脚本,这些脚本被相应地每小时、每日、每周、或每月执行。这些目录中的文件应该是 shell 脚本。

如果某 cron 任务需要根据调度来执行,而不是每小时、每日、每周、或每月地执行,它可以被添加到 /etc/cron.d 目录中。该目录中的所有文件使用和 /etc/crontab 中一样的语法。

# record the memory usage of the system every monday

# at 3:30AM in the file /tmp/meminfo 30 3 * * mon cat /proc/meminfo /tmp/meminfo

# run custom script the first day of every month at 4:10AM 10 4 1 * * /root/scripts/backup.sh

同时在写crontab执行的.sh脚本时要注意添加权限和路径。例如:

crontab语句:30 14 * * * /opt/apps/ems_query/bin/start.sh

相应的脚本:

source /home/tvgame/.bash_profile

cd /opt/apps/ems_query/bin/

java -Xmx64M -jar ../lib/ems_query.jar

shell脚本crontab导入Java配置

进行脚本调用。

环境:linux操作系统、用户:普通用户(无root权限)、系统java web(ssh框架)目标:通过crontab定时每天1点执行系统中的action方法,该action方法调用接口,把系统中特定信息上传到另一系统。现假设action方法已经写好,目前要做的就是配置crontab调用action。思路:创建shell脚本,调用java;通过crontab定时调用shell脚本。

crontab定时执行kettle作业报错java.io.file parameter must be a directory,数据库连接用的jndi。

(二) 安装jre-6u23-linux-x64.bin

将jre-6u23-linux-x64.bin上传到linux服务器

1. 在终端上,键入:

su

2. 输入超级用户口令。

3. 切换到所需的安装目录。类型:

cd /strong目录路径名

例如,要在 /usr/java/ 目录中安装软件,请键入:

cd /usr/java/

关于超级用户访问权限的说明:要将 JRE 安装在系统级位置(例如 /usr/local),必须以超级用户身份登录,从而获得必要的权限。如果您不具有超级用户访问权限,请将 JRE 安装在您的主目录中,或者安装在您具有写入权限的子目录中。

4. 将您下载的文件的权限更改为可执行。类型:

chmod a+x jre-6u23-linux-x64.bin

5. 启动安装过程。键入:

./ jre-6u23-linux-x64.bin

此时将显示二进制许可协议。通读许可协议。按空格键显示下一页。读完许可协议后,输入 yes 继续安装(此步骤可能直接跳过)。

7. JRE 安装在其自身的目录中。在本例中,它将安装在 /usr/java/ jre1.6.0_23目录中。当安装完成时,您将看到Done(完成)字样。

(三) 配置java环境变量

1. 命令行键入“cd /etc”进入etc目录

2. 命令行键入“vi profile”打开profile文件

3. 敲击键盘ctrl+F到文件末尾

4. 在末尾处,即第一个~的地方,敲击键盘将以下内容输入到文件

JAVA_HOME=/usr/java/jre1.6.0_23

PATH=$JAVA_HOME/bin:$PATH

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export JAVA_HOME

export PATH

export CLASSPATH

5. 键盘敲击exc,命令行键入“:wq”,保存文件;

6. 重新登录linux,在命令行键入“java”,如果出现帮助信息则表示配置成功。

然后,部署kettle

1. 将pdi-ce-4.1.0-stable.zip上传到linux服务器

2. 使用unzip命令解压pdi-ce-4.1.0-stable.zip

unzip pdi-ce-4.1.0-stable.zip -d "/mnt/kettle"

3. 赋予解压目录下.sh文件的执行权力

chmod +x *.sh

4. 进入解压目录,键入“./kitchen.sh”回车,如果有帮助信息则表示kettle环境部署成功

※(重点)接着,编写执行kettle任务的shell脚本

创建test.sh,将以下内容复制粘贴到里面,然后键入“chmod +x /mnt/kettle/*.sh”,赋予test.sh执行权限。

export JAVA_HOME=/usr/java/jre1.6.0_23

export PATH=$JAVA_HOME/bin:$PATH

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

/mnt/kettle/data-integration/kitchen.sh -file=/mnt/kettle/test.kjb /mnt/kettle/display.txt

说明:

前3行,设置java环境变量的语句必不可少,

因为crond是个守护进程,它不归属于任何用户,虽然之前以root身份配置了java的环境变量,但是crond一样找不到java命令,

所以,当crond执行kettle任务时,需要动态设置java环境变量,crond才能找到java命令。

最后,使用crontab命令添加定时任务

crontab 命令介绍?怎么用?

任务调度的crond常驻命令

crond 是linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。而linux任务调度的工作主要分为以下两类:

1、系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存

2、个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置

Crontab是UNIX系统下的定时任务触发器,其使用者的权限记载在下列两个文件中:

文件

含义

/etc/cron.deny

该文件中所列的用户不允许使用Crontab命令

/etc/cron.allow

该文件中所列的用户允许使用Crontab命令

/var/spool/cron/

是所有用户的crontab文件

/var/spool/cron/crontabs

/var/spool/cron/crontabs

Crontab命令的格式为:crontab –l|-r|-e|-i [username],其参数含义如表一:

参数名称

含义

示例

-l

显示用户的Crontab文件的内容

crontabl –l

-i

删除用户的Crontab文件前给提示

crontabl -ri

-r

从Crontab目录中删除用户的Crontab文件

crontabl -r

-e

编辑用户的Crontab文件

crontabl -e

用户所建立的Crontab文件存于/var/spool/cron中,其文件名与用户名一致。

它的格式共分为六段,前五段为时间设定段,第六段为所要执行的命令段,

格式如下:* * * * *

其时间段的含义如表二:

含义

取值范围

第一段

代表分钟

0—59

第二段

代表小时

0—23

第三段

代表日期

1—31

第四段

代表月份

1—12

第五段

代表星期几,0代表星期日

0—6

例:如果用户的Crontab文件的内容是:29 19 * * * echo its dinner time,则系统每天的19:29显示‘its dinner time’

示例(创建一个cron全过程,每分钟都会在test.txt里输入当前时间):

1. 以普通用户登录linux系统(我用的是CentOS4.1)

2. $crontab –e

说明:系统默认的编辑器是VIM,如果不是请加上以下shell:

$EDITOR=vi

$export EDITOR

3. 输入”*/1 * * * * date $HOME/test.txt”,save and exit VIM

4. $su root

5. $cd /etc/init.d

6. ./crond restart

下面看看看几个具体的例子:

● 0 */2 * * * /sbin/service httpd restart 意思是每两个小时重启一次apache

● 50 7 * * * /sbin/service sshd start 意思是每天7:50开启ssh服务

● 50 22 * * * /sbin/service sshd stop 意思是每天22:50关闭ssh服务

● 0 0 1,15 * * fsck /home 每月1号和15号检查/home 磁盘

● 1 * * * * /home/bruce/backup 每小时的第一分执行 /home/bruce/backup这个文件

● 00 03 * * 1-5 find /home "*.xxx" -mtime +4 -exec rm {} /; 每周一至周五3点钟,在目录/home中,查找文件名为*.xxx的文件,并删除4天前的文件。

● 30 6 */10 * * ls 意思是每月的1、11、21、31日是的6:30执行一次ls命令

参数 :

crontab -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)

crontab -r : 删除目前的时程表

crontab -l : 列出目前的时程表

crontab file [-u user]-用指定的文件替代目前的crontab。

时程表的格式如下 :

f1 f2 f3 f4 f5 program

其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。

当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推

当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推

当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推

当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,其馀类推

使用者也可以将所有的设定先存放在档案 file 中,用 crontab file 的方式来设定时程表。

crontab执行java程序的问题:

一 crontab使用注意:

crontab -l查看该用户的crontab配置,crontab -e编辑该用户的crontab配置配置一般在末尾加上 21表示错误输出(2)和标准输出(1)一样输出到同一个由前面指定的地方

如 15 14 * * * /sys_back/monitor.sh /sys_back/log/monitor.log 21

表示每天14:15执行monitor.sh脚本,错误和标准输出都写入monitor.log文件

涉及到文件名时最好写绝对路径

二 问题及解决

shell脚本有echo语句,有java -jar执行java程序。直接执行脚本时,一切顺利,但是放到crontab中执行时,echo语句正常,java程序却没有执行。

1 网上查找,觉得应该是环境变量的问题。说是要将java环境变量加入到shell脚本中,按照

这个方法做,发现问题依然存在。百思不得其解。

2 经转换角度,看java程序是否有问题。在java语句中直接加入打印语句,发现其在crontab日志中

居然可以显示。终于确定是java程序的问题。java程序功能很简单,就是一个语句java -Dosgi.console -Dosgi.configuration.area=./configuration -jar equinox.jar -console用来启动osgi框架。

于是在shell脚本中不调用java程序,直接改为程序中的这一句,问题解决。

但是又引发新的问题:直接java -jar会源源不断的输出osgi到日志文件,导致日志文件越来越大。

不可行。再想办法解决。

3 感觉还是相对路径的问题。尝试在crontab调用的脚本中用相对路径向一个文件输出一句话,发现失败。(单独执行脚本没问题)既然如此,是不是java程序中也不能用相对路径呢。遂将./configuration及equinox.jar都用绝对路径,再调试,终于成功,至此问题解决。但始终感觉在程序中用绝对路径很不方便维护。

三 附加问题及解决

此脚本的作用就是判断osgi程序是否在运行,如果不运行则启动。

实现思路是ps -elf得到进程id及状态,如果id不存在,则启动,如果id存在但状态不是运行中(solaris为O,AIX为A),则杀掉原进程重新启动。

发现程序在运行几天后会自动停掉,以为是java程序有问题,然而却始终找不到问题在哪里。在解决上面问题时,却意外的发现可能不是java程序的问题。man ps时发现,solaris中,进程状态除了O,还有S(sleeping) R(Runnable) Z(Zombie僵尸进程)T(stopped),只有后两种状态下进程才是有问题的,所以很可能是crontab执行脚本时,程序状态非O就被杀掉,重启时却因为上面的问题没成功。于是修改脚本,状态是后两种时才重启。这个问题也解决了。

我也是网上转的,望采纳

关于Linux的crontab执行的权限问题,调用java程序更新文件报错。

你这种问题是典型的crontab不共用环境变量的问题。

就是说定义在crontab中的脚本必须将需要依存的环境变量定义在shell脚本中,否则crontab不会去系统中找。但是手动执行该脚本,脚本中需要用到的环境变量会自动去寻找。

这就是你crontab执行失败而手动执行成功的原因。

解决方法:

将shell脚本需要依赖的环境变量写进去就行了

crontab转java的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于cron转换器、crontab转java的信息别忘了在本站进行查找喔。