假设我有test.sh如下。目的是通过此脚本运行一些后台任务,不断更新某些文件。如果后台任务由于某种原因终止,则应重新启动。
#!/bin/sh
if [ -f pidfile ] && kill -0 $(cat pidfile); then
cat somewhere
exit
fi
while true; do
echo "something" >> somewhere
sleep 1
done &
echo $! > pidfile
Run Code Online (Sandbox Code Playgroud)
并想这样称呼它./test.sh | otherprogram,例如./test.sh | cat。
管道没有关闭,因为后台进程仍然存在并且可能会产生一些输出。我怎样才能告诉管道在结束时关闭test.sh?有没有比pidfile在调用管道命令之前检查是否存在更好的方法?
作为一个变体,我尝试在 的末尾使用#!/bin/bashand ,但它仍在等待管道关闭。disowntest.sh
我实际上想要实现的目标:我有一个“状态”脚本,它收集各种脚本的输出(uptime、free、date、get-xy-from-dbus等),与此处类似test.sh。脚本的输出被传递到我的窗口管理器,它会显示它。它也用在我的 GNU 屏幕底线中。
由于使用的某些脚本可能需要一些时间来创建输出,因此我想将它们从输出集合中分离。所以我把它们放在一个while true; do script; sleep 1; done循环中,如果尚未运行则启动该循环。
现在的问题是我不知道如何告诉调用脚本“真正”分离守护进程。
我已经开始大约一两个月了,我必须开发一个基于 Wifi 指纹识别的室内定位系统。我需要一个定期扫描 wifi AP 并将结果数据发送到服务器的应用程序。
到目前为止,我创建了一个应用程序,它能够扫描 WiFi AP 并在检测到不同连接时获取结果。我在主要活动中使用广播接收器执行此操作。该应用程序还能够将数据发送到服务器。
我现在想要的是将这个过程移至后台的定期过程,即使智能手机处于睡眠模式时也是如此。
我已经阅读了一些有关如何执行此操作的主题,但没有一个是明确的。我的问题是最好的方法是什么?将 Service/IntentService 与 Timer/TimerTask 一起使用?
谢谢。
编辑:谢谢!!AlarmManager 和服务工作正常!
我想编写一个在后台运行并等待用户在任何其他应用程序中按下按键的应用程序。当按下该键时,我的应用程序将执行某些操作。
这在Java中可能吗?如果是这样,如何实现这一点?
我有一个呈现很多部分内容的页面。我将它们全部缓存起来,这使得速度非常快。天哪!
问题是,由于部分的数量,第一次运行,在写入缓存时,需要很长时间,请求超时(但其他时间真的很快)
我也使用 sidekiq (但问题与任何后台处理器相关)
有没有办法将这些部分保存在后台进程中,以便错过缓存(由于过期)的用户不会超时?所以我会检查所有部分,以及那些缓存过期(或即将过期)的部分,我将重新缓存它们?
caching ruby-on-rails fragment-caching background-process ruby-on-rails-4
我想知道应用程序更新时应用程序处于什么状态。
例如:假设我们正在运行一个应用程序(称为 Le Music),它在后台模式下播放音乐。
现在我们去商店看到有可用的更新,然后点击更新。当前版本的乐音乐从旧版本过渡到新版本的生命周期是怎样的?
我正在为我的应用程序开发一个很棒的功能,它需要在后台定期发送 HTTP 请求。
我已经在这里阅读了很多文章和讨论,但还没有提出解决方案,因为我在stackoverflow.com上遇到的所有建议都只能部分解决问题。
让我详细解释一下我希望我的应用程序做什么。
假设有一个带有 API 的网站,我想定期发送请求(当应用程序处于后台模式时)以检查网站上的数据状态。如果数据的状态可以接受,我会向用户发送推送通知,通知他数据目前是正确的。
有人可以提出一个如何在 iOS 应用程序中实现这个想法的解决方案吗?
我们目前使用delayed_job和rails来管理系统中一些长时间运行的作业。其中一些作业可能需要几个小时才能运行,但我们也喜欢频繁部署,通常一天多次。此设置的问题在于,我们必须在部署期间重新启动delayed_job以获取代码更改,以便使用最新代码处理任何新作业。
我们找到的解决方案是,对于任何需要运行一段时间以上的作业,我们会分叉延迟的作业,以便它立即返回,并且分叉的进程会处理该工作。这样,部署可以重新启动所有延迟的作业进程,而长时间运行的“作业”将继续运行,直到它作为孤立进程完成。
我们已经研究过 sidekiq,但看起来在尝试部署新代码时我们也会遇到同样的问题。
是否有人开发了他们推荐的解决方案来处理跨多个部署的长时间运行的后台进程?
deployment ruby-on-rails background-process delayed-job sidekiq
我有一个用于更新用户状态/位置的粘性服务。
Android 偶尔会杀死我的服务并重新启动服务,这没关系,但问题是onStartCommand在这些重新启动中没有调用。
我应该设置一些特定的标志吗?
我通过标准文件输入接收请求参数中的文件
def create
file = params[:file]
upload = Upload.create(file: file, filename: "img.png")
end
Run Code Online (Sandbox Code Playgroud)
但是,对于大型上传,我想在后台作业中执行此操作。Sidekiq 或 Resque 等流行的后台作业选项依赖于 Redis 来存储参数,因此我不能只通过 Redis 传递文件对象。
我可以使用Tempfile,但在某些平台(例如 Heroku)上,本地存储并不可靠。
我必须有哪些选项才能使其在“任何”平台上可靠?
我正在尝试向手机发送通知,当收到来电时。当我的应用程序打开时它已经在后台工作。当应用程序关闭时,如何发送此通知(具有 onNotificationPressed 方法)?
似乎
local_notification_plugin发送预定的通知。
报警管理器没有来电方法。(至少我找不到)
其他类似的问题通常会推荐这两个插件,但它们似乎都没有帮助。