我有一个使用 go-rod 用 go 编写的程序,它启动无头铬并连接到调试端口以执行一些与 Web 相关的操作。使用模式相当于Python中的selenium或puppeteer。
当我在 ssh 会话中从命令行运行该程序时,它可以工作。
我现在需要每晚执行这个程序。不幸的是,将其作为 cron 作业运行是行不通的。错误信息是Failed to get the debug url: /system.slice/cron.service is not a snap cgroup
。
snap 提供的安全性是一件好事,我想保留它。
如何使用 snap chromium 每晚运行我的程序?
编辑:按照noisefloor的建议,我设置了一个systemd计时器来将我的程序作为用户服务运行。即使我注销并重新启动后,它仍然有效。这是食谱。
mkdir -p ~/.config/systemd/user
loginctl enable-linger <user>
:告诉 systemd <user> 有一些 systemd 服务和计时器存储在~/.config/systemd/user
. <user> 将替换为您的帐户名。~/.config/systemd/user/myservice.service
创建包含以下内容的服务文件
[Unit]
Description=My service
[Service]
ExecStart=<cmd args>
[Install]
WantedBy=multi-user.target
~/.config/systemd/user/myservice.timer
创建名为包含的计时器文件
[Unit]
Description=Timer for my service
[Timer]
# start myservice every night at 05:00:00 in the morning
OnCalendar=*-*-* 5:00:00
Persistent=true
[Install]
WantedBy=timers.target
systemctl --user start myservice.timer
检查计时器是否正在运行:
systemctl --user list-timers
重启后启用计时器
systemctl --user enable myservice.timer
这比添加 crontab 行稍微繁琐一些,但我们受益于 cgroup 沙箱保护。
注意:systemctl 命令不必使用 sudo 或以 root 身份执行。