我目前正在开发关于私人服务器(例如Minecraft服务器)的个人应用程序,并且由于查询服务器需要一些时间,我决定实施排队作业,但是,它们工作不正常,即使在调用时也会立即运行它们被延迟,导致页面请求的大量延迟.
这是我的HomeController的索引(),它调用作业以30秒的延迟更新每个服务器:
public function index()
{
$servers = Server::all();
foreach($servers as $server)
{
//Job Dispatch
$job = (new UpdateServer($server->id))->delay(30);
$this->dispatch($job);
}
return view('serverlist.index', compact('servers'));
}
Run Code Online (Sandbox Code Playgroud)
更新服务器的作业类如下:
class UpdateServer extends Job implements SelfHandling, ShouldQueue
{
use InteractsWithQueue, SerializesModels;
protected $id;
public function __construct($id)
{
$this->id = $id;
}
public function handle(){
$server = Server::findOrFail($this->id);
//preparing the packet
$test = new RAGBuffer();
$test->addChar('255');
$test->addChar('1');
$test->addShort(1 | 8);
//finding the server
$serverGame = new RAGServer($server->server_ip);
//Get server info
$status = $serverGame->sendPacket($test);
$server->onlinePlayers = …
Run Code Online (Sandbox Code Playgroud) 根据我的理解,Job对象应该在一定时间后收获pod.但是在我的GKE集群(Kubernetes 1.1.8)上,似乎"kubectl get pods -a"可以从几天前列出pod.
所有都是使用Jobs API创建的.
我注意到用kubectl删除作业删除作业后,pod也被删除了.
我主要担心的是,我将在批处理作业中在集群上运行数千和数万个pod,并且不希望重载内部积压系统.
使用 Travis CI,我们可以通过向提交添加后缀来跳过特定提交的构建。这在Travis CI 中有描述。当我只编辑README.md
与代码无关的内容并且不需要触发飞行前构建时,我发现此功能很实用。
[skip ci]
Run Code Online (Sandbox Code Playgroud)
如何on: push
使用 GitHub 操作跳过作业触发事件?
name: Maven Build
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Check-out project
uses: actions/checkout@v1
- name: Set up JDK 11.0.3
uses: actions/setup-java@v1
with:
java-version: 11.0.3
- name: Build with Maven
run: mvn -B package --file pom.xml
Run Code Online (Sandbox Code Playgroud)
答案摘要:
非常感谢所有提供各种方法来实现它的回答者。我敢打赌,每个人在问题的起源和 CI 方法方面都需要一些不同的东西。以下是为快速导航列出的答案:
readme.md
文件中的CI :https : //stackoverflow.com/a/61876395/3764965[skip ci]
作为一个新的 GitHub 功能:
[skip ci] …
需要一个调用SQL Server代理作业的存储过程,并返回作业是否成功运行.
到目前为止我有
CREATE PROCEDURE MonthlyData
AS
EXEC msdb.dbo.sp_start_job N'MonthlyData'
WAITFOR DELAY '000:04:00'
EXEC msdb.dbo.sp_help_jobhistory @job_name = 'MonthlyData'
GO
Run Code Online (Sandbox Code Playgroud)
哪个开始工作,如果工作成功与否,最好的方法是什么?
确定编辑并使用了WAITFOR DELAY,因为作业通常在3-4分钟之间运行,从不超过4分.工作但是有更有效的方法吗?
我有一系列正在运行的作业.完成后我使用receive-job并将输出写入屏幕.我想获取该输出并将其记录到文件中.我不希望在作业运行时产生输出,因为一次运行多个作业,记录将会散布.Get-Job | Receive-Job以非常有条理的方式打印输出.
我已经尝试了以下所有内容,没有输出写入文件或存储在变量中,它只是进入屏幕:
#Wait for last job to complete
While (Get-Job -State "Running") {
Log "Running..." -v $info
Start-Sleep 10
}
Log ("Jobs Completed. Output:") -v $info
# Getting the information back from the jobs
foreach($job in Get-Job){
Receive-Job -Job $job | Out-File c:\Test.log -Append
$output = Receive-Job -Job $job
Log ("OUTPUT: "+$output)
Receive-Job -Job $job -OutVariable $foo
Log ("FOO: "+$foo)
}
Run Code Online (Sandbox Code Playgroud)
编辑:在看到Keith的评论之后,我已经删除了foreach中额外的Receive-Job调用:
# Getting the information back from the jobs
foreach($job in Get-Job){
Receive-Job -Job $job -OutVariable temp …
Run Code Online (Sandbox Code Playgroud) 我试着从求职者那里收集一些信息.对于初学者,我想首先获得运行的工作信息,例如工作ID或工作名称等.但是已经卡住了,这就是我所拥有的(打印出当前正在运行的工作的工作ID):
public static void main(String[] args) throws IOException {
Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "zk1.myhost,zk2.myhost,zk3.myhost");
conf.set("hbase.zookeeper.property.clientPort", "2181");
InetSocketAddress jobtracker = new InetSocketAddress("jobtracker.mapredhost.myhost", 8021);
JobClient jobClient = new JobClient(jobtracker, conf);
JobStatus[] jobs = jobClient.jobsToComplete();
for (int i = 0; i < jobs.length; i++) {
JobStatus js = jobs[i];
if (js.getRunState() == JobStatus.RUNNING) {
JobID jobId = js.getJobID();
System.out.println(jobId);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这上面努力时显示作业ID,但现在我想显示的作业名称以及工作方式的魅力.所以我在打印作业ID后添加了这一行:
System.out.println(jobClient.getJob(jobId).getJobName());
Run Code Online (Sandbox Code Playgroud)
我得到这个例外:
Exception in thread "main" java.lang.NullPointerException
at org.apache.hadoop.mapred.JobClient$NetworkedJob.<init>(JobClient.java:226)
at org.apache.hadoop.mapred.JobClient.getJob(JobClient.java:1080)
at org.apache.test.JobTracker.main(JobTracker.java:28)
Run Code Online (Sandbox Code Playgroud)
jobClient
不是null
.我知道这是因为我尝试使用null …
我正在尝试复制数据库.通过复制数据库向导时,我收到执行SQL Server代理作业错误.错误说明
工作失败了.检查目标服务器上的事件日志以获取详细信息
执行操作
添加包的日志(成功)
添加传输数据库对象的任务(成功)
创建包(成功)
启动SQL Server代理作业(成功)
执行SQL Server代理作业(错误)
错误:
工作失败了.检查目标服务器上的事件日志以获取详细信息.(复制数据库向导)
我似乎无法找到造成这个问题的原因.我使用正确的方法吗?我只需要复制这个数据库.提前致谢.
在阅读文档[1]时,术语"jobspec"会出现几次.
什么是jobspec?
[1] https://www.gnu.org/software/bash/manual/html_node/Job-Control-Builtins.html
ActionJob
在Rails中连接的常见模式是使用一个perform()
方法设置一个Job,该方法通过perform_now
或者异步调用perform_later
在邮件程序的特殊情况下,可以直接打电话deliver_now
或deliver_later
因为ActionJob
是很好的集成ActionMailer
.
该轨道文档有以下评论-
# If you want to send the email now use #deliver_now
UserMailer.welcome(@user).deliver_now
# If you want to send the email through Active Job use #deliver_later
UserMailer.welcome(@user).deliver_later
Run Code Online (Sandbox Code Playgroud)
措辞使得它看起来像deliver_now
会不会使用ActiveJob
发送邮件.那是正确的,如果有啥之间真正的差异deliver_now
和deliver_later
?一个不是异步的吗?
同样,同样的差异适用于perform_now
和perform_later
?
谢谢!
是否可以使用以下要求定义构建作业的gitlab-ci文件:
我想到了类似的东西,但这是错误的:
build_jar:
stage: build
script:
- echo "build jar"
artifacts:
paths:
- jar/path/*.jar
only:
- master
when: manual
Run Code Online (Sandbox Code Playgroud)
对我来说,唯一的解决方案是拥有两个作业,一个用于主推,一个用于手动输入.但缺点是,在gitlab中它变得令人困惑