sudo ./path/to/spark/sbin/start-all.sh
然后在系统准备重新启动/关闭时运行此命令:
sudo ./path/to/spark/sbin/stop-all.sh
我如何开始?我有可以建立的基本模板吗?
我尝试使用一个非常简单的文件(文件:
/lib/systemd/system/spark.service
):[Unit]
Description=Spark service
[Service]
ExecStart=sudo ./path/to/spark/sbin/start-all.sh
哪个不起作用。
#1 楼
您的.service
文件应如下所示:[Unit]
Description=Spark service
[Service]
ExecStart=/path/to/spark/sbin/start-all.sh
[Install]
WantedBy=multi-user.target
现在,采取一些其他步骤来启用和使用
.service
文件:将其放在
/etc/systemd/system
文件夹中,并命名为myfirst.service
确保脚本可执行文件包含:
chmod u+x /path/to/spark/sbin/start-all.sh
启动它:
sudo systemctl start myfirst
使其在启动时运行:
sudo systemctl enable myfirst
停止:
sudo systemctl stop myfirst
注意事项
您无需在
sudo
中启动Spark您的服务,因为默认服务用户已经是root用户。请查看下面的链接以获取更多
systemd
选项。此外,
现在我们所拥有的仅仅是基本,这里是spark的完整设置:
[Unit]
Description=Apache Spark Master and Slave Servers
After=network.target
After=systemd-user-sessions.service
After=network-online.target
[Service]
User=spark
Type=forking
ExecStart=/opt/spark-1.6.1-bin-hadoop2.6/sbin/start-all.sh
ExecStop=/opt/spark-1.6.1-bin-hadoop2.6/sbin/stop-all.sh
TimeoutSec=30
Restart=on-failure
RestartSec=30
StartLimitInterval=350
StartLimitBurst=10
[Install]
WantedBy=multi-user.target
要设置服务:
sudo systemctl start spark.service
sudo systemctl stop spark.service
sudo systemctl enable spark.service
进一步阅读
请通读以下链接。 Spark是一个复杂的设置,因此您应该了解它如何与Ubuntu的init服务集成。
https://datasciencenovice.wordpress.com/2016/11/30/spark-stand- alone-cluster-as-a-systemd-service-ubuntu-16-04centos-7 /
https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files
https://www.freedesktop.org/software/systemd/man/systemd.unit.html
评论
注意并更新
–乔治·乌多森
17年5月26日在9:16
谢谢您,我根据您的建议创建了一个文件。在运行sudo systemctl start spark时,收到以下错误:无法启动spark.service:未正确加载单元spark.service:参数无效。有关详细信息,请参见系统日志和“ systemctl status spark.service”。
– Macourtney7
17年5月26日在10:24
systemctl状态spark.service的主要部分如下:可执行路径不是绝对路径,而spark.service:服务缺少ExecStart =和ExecStop =设置。拒绝。
– Macourtney7
17年5月26日在10:27
问题是:1)需要Spark二进制路径(应替换服务文件中的二进制路径); 2)Spark具有关闭命令是什么。 3)您是否浏览了我给您的链接。我不使用火花,所以供应它们
–乔治·乌多森
17年5月26日在11:05
@GeorgeUdosen感谢您的回答,我的问题是重启后如何在特定命令下运行spark?问题在这里askubuntu.com/questions/979498/…
– Soheil Pourbafrani
17年12月13日在6:21
#2 楼
将其复制粘贴到终端(作为根用户)中,以创建/root/boot.sh
并在启动时运行它:bootscript=/root/boot.sh
servicename=customboot
cat > $bootscript <<EOF
#!/usr/bin/env bash
echo "$bootscript ran at $(date)!" > /tmp/it-works
EOF
chmod +x $bootscript
cat > /etc/systemd/system/$servicename.service <<EOF
[Service]
ExecStart=$bootscript
[Install]
WantedBy=default.target
EOF
systemctl enable $servicename
要修改参数,例如使用其他
$bootscript
,只需手动设置该变量,然后在复制命令时跳过该行。运行命令后,您可以使用自己喜欢的编辑器编辑
/root/boot.sh
,它将在下次启动时运行。您还可以使用以下命令立即运行它:systemctl start $servicename
评论
我对systemd文档有些困惑,但不应将它设为Type = oneshot RemainAfterExit = yes,否则除非自定义脚本使某些进程处于运行状态,否则systemd会认为该任务处于非活动状态。
– Peter Lamberg
19年7月27日在14:38
@PeterLamberg我也尝试阅读systemd文档,但我们俩都是;)。我记得它们不是很清楚,但是我发布的答案在多个系统上都对我有效(我不时重新访问此页面)。您是说,因为它被认为是“非活动”的,所以每个后续的“开始”调用都会重新运行脚本?因为我会认为这是shell脚本所期望的。如果在重新启动之前不得不“停止”一些实际上未运行的程序,我会觉得很奇怪。
–吕克
19年7月27日在18:53
评论
看看:wiki.ubuntu.com/SystemdForUpstartUsers@WillemK,您好,我已经查看了此页面。我发现的问题是我不能只用ExecStart =替换exec。另外,我以前从未用过新贵。
脚本路径前的点看起来非常可疑。
@AndreaLazzarotto我认为OP试图以OP在终端中的方式运行脚本,因此....
@AndreaLazzarotto,您好,这是正确的。抱歉造成任何混乱。