linux 定时器安装,linux安装 jiacrontab 管理定时任务

自己有几个需要定时运行的爬虫,用不到诸如 pyspider 之类的爬虫框架,但是又觉得 crontab 不太直观。所以找到了 jiacrontab,自带 web 界面,使用 Go 语言开发。

提供可视化界面的定时任务&常驻任务管理工具。

功能允许设置每个脚本的超时时间,超时操作可选择邮件通知管理者,或强杀脚本进程

允许设置脚本的最大并发数。

一台 server 管理多个 client。

每个脚本都可在 server 端灵活配置,如测试脚本运行,查看日志,强杀进程,停止定时…。

允许添加脚本依赖(支持跨服务器),依赖脚本提供同步和异步的执行模式。

友好的 web 界面,方便用户操作。

脚本出错时可选择邮箱通知多人。

支持常驻任务,任务失败后可配置自动重启。

支持管道操作。

说明

jiacrontab 由 server,client 两部分构成,两者完全独立通过 rpc 通信。

server:向用户提供可视化界面,调度多个 client。

client:实现定时逻辑,隔离用户脚本,将 client 布置于多台服务器上可由 server 统一管理。 每个脚本的定时格式完全兼容 linux 本身的 crontab 脚本配置格式。

界面截图

198fbd3042a8687f9639e9b0d24a47a5.png

98f5d12d36ca1fe746508097db182fb7.png

d6229afa126455b4421d436c55508a19.png

下载安装并运行$ wget https://jiacrontab.iwannay.cn/download/jiacrontab-v1.4.5-linux-amd64.zip

$ unzip jiacrontab-v1.4.5-linux-amd64.zip

$ cd jiacrontab/server

$ nohup ./jiaserver &> jiaserver.log &

$ cd .. && cd client

$ nohup ./jiaclient &> jiaclient.log &

之后,可以在浏览器中输入 http://YourServerIP:20000 进行访问。默认用户名为 admin,密码是 123456。

设置开机自启动

方法一:

在 /etc/init.d 新建开机启动脚本,命名为 jiacrontab

$ vi /etc/init.d/jiacrontab

# 输入以下内容,:wq 保存

#!/bin/bash

### BEGIN INIT INFO

# Provides: uznEnehC

# Required-Start: $network $remote_fs $local_fs

# Required-Stop: $network $remote_fs $local_fs

# Default-Start: 2 3 4 5

# Default-Stop: 0 1 6

# Short-Description: jiacontab

# Description: jiacontab startup

### END INIT INFO

cd root/jiacrontab/server # 假设之前下载到 root 文件夹,根据自身情况修改

nohup ./jiaserver &> jiaserver.log &

cd .. && cd client

nohup ./jiaclient &> jiaclient.log &

exit 0

给予脚本相应的权限

$ chmod 777 /etc/init.d/jiacrontab

设置开机启动

$ update-rc.d jiacrontab defaults

# update-rc.d -f jiacrontab remove # 删除开机启动,添加 -f 参数强制删除

方法二:

新建客户端service

vi /etc/systemd/system/jiaclient.service

写入如下代码

[Unit]

Description=jiacrontab

[Service]

User=root

Group=root

Type=simple

ExecStart=/data/app/jiacrontab/client/jiaclient

ExecReload=/bin/kill -s HUP $MAINPID

KillMode=control-group

Restart=on-failure

GuessMainPID=yes

WorkingDirectory=/data/app/jiacrontab/client/

PIDFile=/data/app/jiacrontab/client/jiaclient.pid

RestartSec=15

[Install]

WantedBy=multi-user.target

新建服务端service

vi /etc/systemd/system/jiaserver.service[Unit]

Description=jiacrontab

[Service]

User=root

Group=root

Type=simple

ExecStart=/data/app/jiacrontab/server/jiaserver

ExecReload=/bin/kill -s HUP $MAINPID

KillMode=control-group

Restart=on-failure

GuessMainPID=yes

WorkingDirectory=/data/app/jiacrontab/server/

PIDFile=/data/app/jiacrontab/server/jiaserver.pid

RestartSec=15

[Install]

WantedBy=multi-user.target

启动jiacrontab以及设置开机启动:

systemctl start jiaclient

systemctl enable jiaclient

systemctl start jiaserver

systemctl enable jiaserver

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux C++中,可以使用定时器来实现定时任务。下面是一个简单的定时器任务实现的示例代码: ```c++ #include <sys/timerfd.h> #include <unistd.h> #include <cstring> #include <cstdint> #include <functional> #include <iostream> class Timer { public: Timer() : fd_(-1) {} bool Start(uint64_t interval_ms, std::function<void()> callback) { if (fd_ != -1) { std::cerr << "Timer has already started\n"; return false; } fd_ = timerfd_create(CLOCK_MONOTONIC, TFD_NONBLOCK); if (fd_ == -1) { perror("timerfd_create"); return false; } struct itimerspec ts; ts.it_value.tv_sec = interval_ms / 1000; ts.it_value.tv_nsec = (interval_ms % 1000) * 1000000; ts.it_interval.tv_sec = ts.it_value.tv_sec; ts.it_interval.tv_nsec = ts.it_value.tv_nsec; if (timerfd_settime(fd_, 0, &ts, NULL) == -1) { perror("timerfd_settime"); close(fd_); fd_ = -1; return false; } callback_ = callback; return true; } void Stop() { if (fd_ != -1) { close(fd_); fd_ = -1; } } void HandleEvent() { uint64_t expirations = 0; ssize_t n = read(fd_, &expirations, sizeof(expirations)); if (n == -1) { perror("read"); return; } callback_(); } private: int fd_; std::function<void()> callback_; }; // 示例用法 int main() { Timer timer; timer.Start(1000, []() { std::cout << "Timer expired\n"; }); sleep(5); timer.Stop(); return 0; } ``` 在上面的代码中,Timer类封装了一个基于timerfd的定时器。Start函数用于启动定时器,interval_ms参数指定了定时器的间隔时间(毫秒),callback参数指定了定时器到期时要执行的回调函数。Stop函数用于停止定时器。HandleEvent函数用于处理定时器事件,即读取定时器文件描述符上的数据,然后执行回调函数。注意,定时器事件会一直触发,直到定时器被停止。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值