根据维基,批处理是在计算机上执行一系列程序(“作业”)而无需人工干预。
我想知道批处理和将进程置于后台之间有什么区别和关系?
后台作业总是批处理吗?是否有批处理没有后台?
感谢致敬!
如何从 SGE 获取(最近)失败的作业列表(failed=100 或 exit_status=137)?从qacct帮助:
[-j [job_id|job_name|pattern]] list all [matching] jobs
Run Code Online (Sandbox Code Playgroud)
如何使用模式?我尝试了以下方法,不起作用。
qacct -j failed=100
Run Code Online (Sandbox Code Playgroud) 我正在尝试在 powershell 中执行函数或脚本块并设置执行超时。
基本上我有以下内容(翻译成伪代码):
function query{
#query remote system for something
}
$computerList = Get-Content "C:\scripts\computers.txt"
foreach ($computer in $computerList){
$result = query
#do something with $result
}
Run Code Online (Sandbox Code Playgroud)
查询的范围可以从使用 Get-WmiObject 的 WMI 查询到 HTTP 请求,并且脚本必须在混合环境中运行,其中包括并非都具有 HTTP 接口的 Windows 和 Unix 计算机。因此,某些查询必然会挂起或需要很长时间才能返回。在我寻求优化的过程中,我写了以下内容:
$blockofcode = {
#query remote system for something
}
foreach ($computer in $computerList){
$Job = Start-Job -ScriptBlock $blockofcode -ArgumentList $computer
Wait-Job $Job.ID -Timeout 10 | out-null
$result = Receive-Job $Job.ID
#do something with result
}
Run Code Online (Sandbox Code Playgroud)
但不幸的是,工作似乎带来了很多开销。在我的测试中,一个在 1.066 秒内执行的查询(根据 $blockofcode …
我想使用Job DSL而不是email-ext插件配置电子邮件通知.
我已经在计算集群上提交了几个作业,但没有设置 --mail-user。我现在可以更新规范吗?希望在作业完成后收到电子邮件。非常感谢!
考虑以下人为的 Makefile:
.PHONY: all one two
SLEEP = 2
all: one two
one two:
@sleep $(SLEEP)
@echo $@
Run Code Online (Sandbox Code Playgroud)
运行make -j 2 all它可以在运行它们中的任何一个所需的时间内完成两个作业,因为它们都是并行运行的。如果您控制 make 的调用并记住每次都执行此操作,这将非常有效,但如果您控制的只是 Makefile,则效果不佳。
设置 MAKEFLAGS 环境变量也可以控制这个:
$ export MAKEFLAGS="-j 2"
$ make all
Run Code Online (Sandbox Code Playgroud)
但是,在 Makefile 中设置此值似乎不起作用:
MAKEFLAGS = -j 2
Run Code Online (Sandbox Code Playgroud)
失败。
export MAKEFLAGS="-j 2"
Run Code Online (Sandbox Code Playgroud)
失败。
同样设置 JOBS 似乎没有任何效果。有没有办法控制从 Makefile 内部运行的默认作业数量?
注意我知道我可以使用一个虚拟配方并从它内部调用一个递归 make,但这会带来大量的混乱,因为我需要为一大堆可能的目标设置它,我处理包含的 Makefile 不一定适合递归。
在 PowerShell 5.1 中,我使用以下命令创建了一个后台作业
Start-Job { while($true) { Get-Random; Start-Sleep 5 } } -Name Sleeper
Run Code Online (Sandbox Code Playgroud)
作业创建得很好,它也返回结果Receive-Job。我用Stop-Jobcmdlet停止了它。
我想在同一个 PS 会话中再次重新启动它。
我执行Get-Jobcmdlet,我看到那里的作业处于停止状态。
如何在不重新创建的情况下重新启动它?
我无法在 about_Jobs 中获取此信息。
脚本块只是一个示例脚本。我更想知道是否有办法重新启动已经存在的工作。
我有大量要从数据库中删除的项目(1M+),我分叉了一个后台作业来处理这个问题,这样用户就不必等待它完成继续他/她正在做,问题是,当项目被删除时,应用程序变得无响应,所以我想我会逐块处理项目并睡眠几秒钟然后继续。
这是处理删除的代码:
// laravel job class
// ...
public function handle()
{
$posts_archive = PostArchive::find(1); // just for the purpose of testing ;)
Post::where('arch_id', $posts_archive->id)->chunk(1000, function ($posts) {
//go through the collection and delete every post.
foreach($posts as $post) {
$post->delete();
}
// throttle
sleep(2);
});
}
Run Code Online (Sandbox Code Playgroud)
预期结果:帖子被分块并处理每个块,然后空闲 2 秒,重复此操作直到删除所有项目。
实际结果:随机数量的项目被删除一次,然后过程结束。没有错误没有指标,没有线索?
有没有更好的方法来实现这一点?
我有创建一个可由特定SQL用户运行的SQL Server代理作业的请求。
如何在不授予用户执行sp_start_job存储过程执行权限的情况下完成操作,这意味着他也可以运行所有其他禁止的作业?
我在 python 中有一个客户端 API,它执行 BigQuery 作业以触发查询并将查询结果写入相应的 BigQuery 表。如何确定该查询结果在任何执行时是否返回零记录?
蟒蛇代码:
def main(request):
query = "select * from `myproject.mydataset.mytable`"
client = bigquery.Client()
job_config = bigquery.QueryJobConfig()
dest_dataset = client.dataset(destination_dataset, destination_project)
dest_table = dest_dataset.table(destination_table)
job_config.destination = dest_table
job_config.create_disposition = 'CREATE_IF_NEEDED'
job_config.write_disposition = 'WRITE_APPEND'
job = client.query(query, location='US', job_config=job_config)
job.result()
Run Code Online (Sandbox Code Playgroud)
我想要如果查询结果没有记录,那么它应该为我打印一些消息。任何人都可以建议如何完成这项工作。
python jobs python-2.7 google-bigquery google-cloud-platform
jobs ×10
powershell ×2
architecture ×1
background ×1
batch-file ×1
eloquent ×1
gnu-make ×1
laravel ×1
linux ×1
makefile ×1
php ×1
python ×1
python-2.7 ×1
slurm ×1
sql ×1
sql-server ×1
timeout ×1