我们有一个嵌入式目标环境(与主机构建环境不同)import tensorflow as tf
import numpy as np
a = tf.placeholder(tf.int32, shape=[None, 5])
r, c = a.get_shape()
x_split = tf.split(1, c, a) # split a along axis 1
last_col = x_split[-1]
mask = tf.greater(last_col, tf.constant(6))
cond = tf.where(mask,
tf.add(last_col, tf.constant(1)), # if true, add one
tf.add(last_col, tf.constant(-1)))# if false, minus one
x_split = x_split[0:-1]
x_split.append(cond)
ans = tf.concat(1, x_split)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
arr = np.array([[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10]])
the_ans = sess.run(ans, feed_dict={a: arr})
'''
the_ans is
[[ 1 2 3 4 4]
[ 6 7 8 9 11]]
'''
正在运行但不是systemd
。
我们还有一个脚本,在大多数系统中,我只需创建一个cron
条目,每五分钟运行一次。
现在我知道如何在cron
下创建一个服务,但这个脚本是在完成其工作后退出的一次性脚本。我想做的是让它在启动时立即运行(当然在systemd
之后)然后每隔五分钟运行一次。
在阅读syslog.target
计时器后,我创建了以下服务文件systemd
:
/lib/systemd/system/xyzzy.service
和等效的[Unit]
Description=XYZZY
After=syslog.target
[Service]
Type=simple
ExecStart=/usr/bin/xyzzy.dash
:
/lib/systemd/system/xyzzy.timer
不幸的是,在启动目标时,计时器似乎没有启动,因为[Unit]
Description=XYZZY scheduler
[Timer]
OnBootSec=0min
OnUnitActiveSec=5min
[Install]
WantedBy=multi-user.target
的输出不包含它。手动启动计时器单元似乎工作正常,但这应该是在用户干预的情况下自动运行的。
我原以为systemctl list-timers --all
会确保计时器单元已经安装并运行,因此会定期启动服务。但是,我注意到WantedBy
目录实际上没有计时器的符号链接。
如何在multi-user.target.wants
完成?
答案 0 :(得分:1)
在您实际启用它之前,计时器不会处于活动状态:
systemctl enable xyzzy.timer
如果您想在重新启动之前查看其工作原理,您也可以启动它:
systemctl start xyzzy.timer
对于单独的目标环境而言,在启动时您无法轻松运行任意命令(但可能会控制文件系统内容),您可以只需在enable
命令中创建相同的符号链接(在您的开发区域中)。
例如(假设SYSROOT
标识目标文件系统的根目录):
ln -s ${SYSROOT}/lib/systemd/system/xyzzy.timer
${SYSROOT}/lib/systemd/system/multi-user.target.wants/xyzzy.timer
这将有效地将计时器单元置于multi-user.target
的启用状态,因此systemd
将以该目标启动它。
此外,通常您的自定义文件将存储在/etc/systemd/system/
中。等效的lib
目录用于托管由软件包或操作系统安装的systemd
文件。
如果您的cron作业每5分钟精确非常重要,那么您应该检查准确性,因为systemd's monotonic timers can slip over time