因此,这是备份数据存储区的本机cronjob条目
cron:
- description: My Daily Backup
url: /_ah/datastore_admin/backup.create?name=BackupToCloud&kind=LogTitle&kind=EventLog&filesystem=gs&gs_bucket_name=whitsend
schedule: every 12 hours
target: ah-builtin-python-bundle
如果我有kind
个空格,我该怎么办呢?所以,如果我的类型是“日志标题”,我会喜欢kind=Log%20Title
吗?
无论是否有空格,这似乎都不起作用。有谁知道我还需要做些什么才能确保备份?
我在admin.appengine.google.com的ah-builtin-python-bundle
日志中没有看到它。
我似乎无法再手动备份,因为当我点击Datastore Admin时,它会将我引导到没有内容的页面。 (Google Bug Report)
任何帮助将不胜感激。 PS。我正在使用PHP App Engine。
答案 0 :(得分:1)
首先,我建议您快速解决使用HTML编码&
所以你会:
&
但是该URL不能超过402个字符,因此更好的解决方案是编写自己的servlet以通过自动添加各种实体种类来处理备份。我知道您正在运行PHP后端,但这是我的代码中的XML和Java示例。
cron.xml中的cron定义
cron:
- description: My Daily Backup
url: /_ah/datastore_admin/backup.create?name=BackupToCloud&kind=LogTitle&kind=EventLog&filesystem=gs&gs_bucket_name=whitsend
schedule: every 12 hours
target: ah-builtin-python-bundle
web.xml中的url映射
<cron>
<description>Daily backups New Way</description>
<url>/cron/backups</url>
<schedule>every day 06:00</schedule>
<timezone>America/Los_Angeles</timezone>
</cron>
queue.xml中的备份任务
<servlet>
<servlet-name>BackupServlet</servlet-name>
<servlet-class>com.your.package.BackupServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BackupServlet</servlet-name>
<url-pattern>/cron/backups</url-pattern>
</servlet-mapping>
servlet类BackupServlet.java
<queue>
<name>backup-queue</name>
<rate>25/s</rate>
<bucket-size>25</bucket-size>
<max-concurrent-requests>25</max-concurrent-requests>
</queue>
,最后是DatastoreUtils.java中的getEntityList()
public class BackupServlet extends HttpServlet {
private Queue queue = QueueFactory.getQueue("backup-queue");
private static final Logger log = Logger.getLogger(BackupServlet.class.getName());
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<String> entities = DatastoreUtils.getEntityList();
// Print query results
for (String kind : entities) {
log.info("Creating backup task for " + kind);
queue.add(withUrl("/_ah/datastore_admin/backup.create").param("name", "datastore-backup-" + kind + "-").param("kind", kind)
.param("filesystem", "gs").param("gs_bucket_name", ADMIN_BACKUPS_BUCKET));
}
response.setStatus(HttpServletResponse.SC_OK);
}
}
答案 1 :(得分:1)
这对我来说非常好。要遵循的步骤
确保&#34;数据存储管理员&#34;在&#34;内置插件中启用&#34; &#34;应用程序设置&#34;中的选项菜单下&#34;管理&#34;在&#34; admin.appengine.google.com&#34;的左侧导航菜单中。
启用数据存储管理员后,转到您的&#34;应用引擎&#34; →&#34;仪表板&#34;并检查是否&#34; ah-builtin-python-bundle&#34;列在&#34;版本&#34;下拉框。
使用&#34; appcfg.py update_cron&#34;上传您的cron.yaml文件命令
转到&#34; Cron Jobs&#34;在左侧导航菜单中,检查cron.obam中提到的cronjob是否列在那里
注意:
&安培;因为它使用xml文件,所以不需要替换,因为它只需要Java。由于您使用yaml,因此无需放大器编码
完全使用默认存储桶名称&#34; appid.appspot.com&#34;,这在&#34;应用程序设置&#34;