我已经创建了一个Go模块,它使用chromedp登录并从我的公司CRM系统下载一些报告。我把这个报告拉到我们的Ubuntu20.04服务器上,创建了一个bash文件,它进入模块的目录并调用命令: go run。
如果我将ssh放到服务器中,并按预期的方式对它执行的文件调用bash命令,那么这个命令将由CRON作业执行,并登录到选定目录中的一个文件中。它只是记录bash脚本的第一个输出,然后它似乎就被卡住了。
这里是cron作业调用的bash文件的一个例子:
cd ~/projects/DNC_Bot/dnc-bot
go run .
下面是crontab中我的行的一个例子:
30 7 * * 1-5 bash ~/projects/DNC_Bot/dnc-bot > ~/cronLogs/output.log 2>&1
我希望这与我进入服务器并调用bash {bashfile}并且它没有问题时一样运行,对此的指导是非常感谢的!
更新以显示代码示例:
func downloadLists() {
// Adding options to run in head mode
opts := append(chromedp.DefaultExecAllocatorOptions[:],
// Change headless flag to false to see browser when executing
chromedp.Flag("headless", true),
// chromedp.UserDataDir(""),
)
allocCtx, cancel := chromedp.NewExecAllocator(context.Background(), opts...)
defer cancel()
// also set up a custom logger
taskCtx, cancel := chromedp.NewContext(allocCtx, chromedp.WithLogf(log.Printf))
defer cancel()
// Loop through Logics sites
for entity, url := range logicSites {
log.Printf("Entity: %s | Logging in to: %s\n", entity, url)
// Log in and open up cases link list
err := chromedp.Run(taskCtx,
// Set Download Behavior/Directory
page.SetDownloadBehavior(page.SetDownloadBehaviorBehaviorAllow).WithDownloadPath("./downloads/"),
chromedp.Navigate(url),
// wait for footer element is visible (ie, page is loaded)
chromedp.WaitVisible(`#txtUsername2`, chromedp.ByID),
// Login
chromedp.SendKeys(`#txtUsername2`, BOT_USER, chromedp.ByID),
chromedp.SendKeys(`#txtPassword2`, BOT_PASS, chromedp.ByID),
chromedp.Click(`#btnLogin2`, chromedp.ByID),
// Wait for Homepage to be viewable
chromedp.WaitVisible(`#page-nav`, chromedp.ByID),
// Click on Cases link
chromedp.Click(`#page-tree > ul > li:nth-child(4)`, chromedp.ByQuery),
chromedp.Sleep(1*time.Second),
// Call func to download filtered views
downloadFilters(),
)
if err != nil {
log.Fatal(err)
}
}
}
发布于 2022-11-19 07:04:05
首先,如果没有特殊的原因,你应该先构建你的围棋应用程序,然后直接运行这个应用。优点是你的应用程序可以在没有安装的服务器上运行。
我刚刚以cron作业的形式运行了下面的演示程序,它可以工作。您可以先尝试此演示,以检查是否有任何问题。
备注:检查系统日志(大多数情况下,检查是否记录了任何错误消息,并确保cron作业已经运行)。
文件:
├── bot.bash
├── go.mod
└── main.go
bot.bash
cd ~/temp/q74482280
go run .
go.mod
module m
go 1.19
require github.com/chromedp/chromedp v0.8.6
require (
github.com/chromedp/cdproto v0.0.0-20220924210414-0e3390be1777 // indirect
github.com/chromedp/sysutil v1.0.0 // indirect
github.com/gobwas/httphead v0.1.0 // indirect
github.com/gobwas/pool v0.2.1 // indirect
github.com/gobwas/ws v1.1.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/mailru/easyjson v0.7.7 // indirect
golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec // indirect
)
main.go
package main
import (
"context"
"log"
"github.com/chromedp/chromedp"
)
func main() {
log.Println("hello chromedp")
ctx, cancel := chromedp.NewContext(context.Background(), chromedp.WithDebugf(log.Printf))
defer cancel()
if err := chromedp.Run(ctx, chromedp.Navigate("https://httpbin.org/status/200")); err != nil {
log.Fatal(err)
}
log.Println("goodbye chromedp")
}
cron工作:
40 * * * * bash ~/temp/q74482280/bot.bash > ~/temp/q74482280/log.txt 2>&1
https://stackoverflow.com/questions/74482280
复制相似问题