把Linux可执行程序做成一个服务(转)

转自:http://www.2cto.com/os/201202/121249.html

在linux系统启动的时候,我们可以看到很多服务性程序一个接一个的被启动(就是那些后面有一个兰色[OK]的行),这些在后台运行的程序为我们使用计算机起了很重要的作用,以这种方式运行的程序有以下特点:
开机启动,关机停止(废话!关机了还运行啊???)
后台运行
通过service 命令控制或查看对应的程序的运行状态
    恩,不错,那怎么把我们自己编制的程序做成这样的一个服务呢?
 
    废话少说,主要分以下3步:
 
    1、把可执行程序放到一个linux系统可以找到的地方。
在linux命令提示符下输入env ,回车后可看到环境变量,里面有一项PATH的,对,这项里所指定的目录都是系统可找到的地方,把我们的可执行程序放入其中的一个目录下即可,我们一般放在/usr/sbin/目录下(放什么有放什么的地方,最好不要乱放)。
 
    2、在目录/etc/init.d/ 下,新建一个以服务名为文件名的文件。
如果我们打开目录/etc/init.d/,看到的文件其实都是服务程序文件,每个文件的内容都大同小异,我们会看到,这里的文件在文件结构上几乎是一样 的。几乎每个文件 都有start、stop、restart和status这样的标志,对,我们新建的这个文件也具有相同的结构,只是在这些标志内部把相应的可执行程序换 成我 们自己的可执行程序即可,知道怎么做了吗?那就是:复制——修改——保存。
 
    3、在目录/etc/rc3.d/ 下,新建一个指向在第2步中建立的服务文件的符号连接文件。
打开目录/etc/rc3.d/ ,我们将看到这里都是符号连接文件(linux系统中的符号连接相当于windows中的快捷方式)。采用以下命令格式:
ln -sf 目标文件名 连接文件名
连接文件名称采用“SXX目标文件名”的格式,其中XX一般是一个从1到100的整数,它表示启动优先级,数字越大,优先级越低,比如:服务A的运行要依赖服务B,那A的XX数字就应该大于B的。后跟“目标文件名”是为了一目了然,一看就知道是哪个文件的符号连接。
目录/etc/rc3.d/ 是系统启动时自动搜索的目录,该目录下的符号连接文件的目标文件,都将被运行,这就是在这个目录建立符号连接的原因——为了开机就运行。
 
    好了,完成以上3个步骤,你就把自己的一个可执行程序做成系统的一个服务了,它具有我们一开始说的几个特定。我们可以用service命令控制这个程序了:
启动:service hdz_service start
停止:service hdz_service stop
重启:service hdz_service restart
上面的hdz_service 为服务名,也就是在第2步中建立的文件名。
 
    不过,好象感觉比较麻烦,能否把这几个步骤自动化一下?这样在一台新机子上部署就方便了,也更象回事-_^!办法当然有了,还记得我们那个记录代码文件之间依赖关系的makefile文件吗?呵呵,我们在这里要用到它了。
在makefile文件中添加一个标志,并在该标志下添加和下面类似的代码:
 
install:
cp ./hdz_pro /usr/sbin/
cp ./hdz_service /etc/init.d/
cd /etc/init.d/
chmod +x hdz_service
cd /etc/rc3.d/
ln -sf ../init.d/hdz_service ./S99hdz_service
 
    在标志install下的没一句话,前面一定要留空白,这不仅是有利于阅读,更是一个要求,makefile文件要求每一句可执行语句前都要有空白(空格或tab)。
上面代码中的hdz_pro 和hdz_service 分别是可执行文件名和服务名,这两个名称换成你自己的就行了,操作时用以下命令:
make install
运行完就一切OK了,简单吧?
 
    大家在看我写的东东时,时不时会碰到“hdz”这样的东西,这是我名字的缩写,说明这正是要替换的。
 
 
-----------------------------------------------------
 
一般系统的运行级别是在   /etc/inittab   里面指定的。有一行是类似  
id:5:initdefault:  
或者  
id:3:initdefault:  
的,这里的数字就是系统的默认运行级别。假设是   5。  
 
启动服务的是依靠   /etc/init.d/   下的脚本启动的。这些都是普通的   shell   脚本,系统在调用的时候,如果是启动服务,则传入   start   作为参数;stop   表示停止;restart   表示重启。因此你可以写一个脚本,比如简单的如这样:  
 
#!/bin/sh  
 
ARG=$1  
 
case   $ARG   in    
start):  
nohup   /path/to/your/program     &  
;;  
stop):  
pkill   program  
;;  
restart):  
pkill   program  
nohup   /path/to/your/program   &  
;;  
esac  
 
把这个脚本放在   /etc/init.d   里面,譬如   /etc/init.d/your_prog  
然后加入相应运行级别的链接:在   5   级启动则    
ln   -s   /etc/init.d/your_prog   /etc/rc5.d/S100your_prog  
ln   -s   /etc/init.d/your_prog   /etc/rc0.d/K100your_prog  
这里两个数字都可以用对应目录里最大的数字,因为没有别的服务依赖你的服务。  
这样表示,当系统进入   init   level   5   的时候启动你的程序,进入   init   level   0   的时候停止你的程序。 
 
----------------------------------------------------------
 
系统服务介绍
1. alsasound :Alsa声卡驱动守护程序。
2. acpid:acpid(Advanced Configuration and Power Interface)是为替代传统的APM电源管理标准而推出的新型电源管理标准。通常笔记本电脑需要启动电源进行管理。
3. atalk:AppleTalk网络守护进程。
4. amd: 自动安装NFS守护进程。
5. anacron:一个自动化运行任务守护进程。
6. apmd:apmd(Advanced Power Management)是高级电源管理。
7. arptables_jf :为arptables网络的用户控制过滤的守护进程。
8. arpwatch: 记录日志并构建一个在LAN接口上看到的以太网地址和IP地址对数据库。
9. autofs:自动安装管理进程automount,与NFS相关,依赖于NIS服务器。
10. bootparamd:引导参数服务器,为LAN上的无盘工作站提供引导所需的相关信息。
11. bluetooch:蓝牙服务器守护进程。
12. crond :cron是Unix下的一个传统程序,该程序周期地运行用户调度的任务。比起传统的Unix版本,Linux版本添加了不少属性,而且更安全,配置更简单。类似计划任务。
13. chargen:使用tcp协议的chargen server,chargen(Character Generator Protocol)是一种网络服务,主要功能是提供类似远程打字的功能。
14. chargen-udp:使用UDP协议的chargen server。
15. cpuspeed:监测系统空闲百分比,降低或加快CPU时钟速度和电压从而在系统空闲时将能源消耗降为最小,而在系统繁忙时最大化加快系统执行速度。
16. dhcpd:动态主机控制协议(Dynamic Host Control Protocol)的服务守护进程。
17. cups:cups(Common UNIX Printing System)是通用UNIX打印守护进程。
18. cups-config-daemons:cups打印系统切换守护进程。
19. cups-lpd:cups行打印守护进程。
20. daytime:使用TCP 协议的Daytime守护进程,该协议为客户机实现从远程服务器获取日期和时间的功能。预设端口:13。
21. daytime-udp:使用UDP 协议的Daytime守护进程。
22. dc_server:使用SSL安全套接字的代理服务器守护进程。
23. dc_client:使用SSL安全套接字的客户端守护进程。
24. diskdump:服务器磁盘备份守护进程。
25. echo:服务器回显客户数据服务守护进程。
26. echo-udp:使用UDP协议的服务器回显客户数据服务守护进程。
27. eklogin:接受rlogin会话鉴证和用kerberos5加密的一种服务的守护进程。
28. gated :网关路由守护进程。它支持各种路由协议,包括RIP版本1和2、DCN HELLO协议、OSPF版本2以及EGP版本2到4。
29. gpm:gpm(General Purpose Mouse Daemon )守护进程为文本模式下的Linux程序如mc(Midnight Commander)提供了鼠标的支持。
30. gssftp: 使用kerberos 5认证的ftp守护进程
31. httpd:Web服务器Apache守护进程。
32. inetd :因特网操作守护程序。
33. innd:Usenet新闻服务器守护进程。
34. iiim:中文输入法服务器守护进程。
35. iptables:iptables防火墙守护进程。
36. irda:红外端口守护进程。
37. isdn:isdn启动和中止服务守护进程。
38. krb5-telnet:使用kerberos 5认证的telnet守护进程。
39. klogin:远程登陆守护进程。
40. keytable:该进程的功能是转载在/etc/sysconfig/keyboards里定义的键盘映射表,该表可以通过kbdconfig工具进行选择。您应该使该程序处于激活状态。
41. irqbalance:对多个系统处理器环境下的系统中断请求进行负载平衡的守护程序。如果你只安装了一个CPU,就不需要加载这个守护程序。
42. kshell :kshell守护进程。
43. kudzu:硬件自动检测程序。
44. ldap:ldap(Lightweight Directory Access Protocol)目录访问协议服务器守护进程。
45. lm_seroems:检测主板工作情况守护进程。
46. lpd :lpd是老式打印守护程序,负责将lpr等程序提交给打印 作业。
47. mdmonitor:RAID相关设备的守护程序。
48. messagebus:D-BUS是一个库,为两个或两个以上的应用程序提供一对一的通讯。
49. microcode_ctl:可编码以及发送新的微代码到内核以更新Intel IA32系列处理器。
50. mysqld: 一个快速高效可靠的轻型SQL数据库引擎守护进程。
51. named:DNS(BIND)服务器守护进程。
52. netplugd:netplugd(network cable hotplug management daemon)守护程序,用于监控一个或多个网络接口的状态,当某些事件触发时运行一个外部脚本程序。
53. netdump:远程网络备份服务器守护进程。
54. netfs:Network Filesystem Mounter,该进程安装和卸载NFS、SAMBA和NCP网络文件系统。
55. nfs:网络文件系统守护进程。
56. nfslock:NFS是一个流行的通过TCP/IP网络共享文件的协议,此守护进程提供了NFS文件锁定功能。
57. ntpd:Network time Protocol daemon(网络时间校正协议)。ntpd是用来使系统和一个精确的时间源保持时间同步的协议守护进程。
58. network:激活/关闭启动时的各个网络接口守护进程。
59. psacct:该守护进程包括几个工具用来监控进程活动的工具,包括ac,lastcomm, accton 和sa。
60. pcmcia:主要用于支持笔记本电脑接口守护进程。
61. portmap:该守护进程用来支持RPC连接,RPC被用于NFS以及NIS 等服务。
62. postgresql: PostgreSQL 关系数据库引擎。
63. proftpd: proftpd 是Unix下的一个配置灵活的ftp服务器的守护程序。
64. pppoe:ADSL连接守护进程。
65. random :保存和恢复系统的高质量随机数生成器,这些随机数是系 统一些随机行为提供的。
66. rawdevices:在使用集群文件系统时用于加载raw设备的守护进程。
67. readahead、readahead_early:readahead和readahead_early是在Fedora core 2中最新推出的两个后台运行的守护程序。其作用是在启动系统期间,将启动系统所要用到的文件首先读取到内存中,然后在内存中进行执行,以加快系统的启动速 度。
68. rhnsd:Red Hat 网络服务守护进程。通知官方的安全信息以及为系统打补丁。
69. routed :该守护程序支持RIP协议的自动IP路由表维护。
70. rsync:remote sync远程数据备份守护进程。
71. rsh :远程主机上启动一个shell,并执行用户命令。
72. rwhod: 允许远程用户获得运行rwho守护程序的机器上所有已登录用户的列表。
73. rstatd:一个为LAN上的其它机器收集和提供系统信息的守候进程。
74. ruserd:远程用户定位服务,这是一个基于RPC的服务,它提供关于当前记录到LAN上一个机器日志中的用户信息
75. rwalld:激活rpc.rwall服务进程,这是一项基于RPC的服务,允许用户给每个注册到LAN机器上的其他终端写消息。
76. rwhod:激活rwhod服务进程,它支持LAN的rwho和ruptime服务。
77. saslauthd: 使用SASL的认证守护进程。
78. sendmail:邮件服务器sendmail守护进程。
79. smb:Samba文件共享/打印服务守护进程。
80. snmpd:本地简单网络管理守护进程。
81. squid:代理服务器squid守护进程。
82. sshd:OpenSSH服务器守护进程。Secure Shell Protocol可以实现安全地远程管理主机。
83. smartd:Self Monitor Analysis and Reporting Technology System,监控你的硬盘是否出现故障。
84. syslog:一个让系统引导时起动syslog和klogd系统日志守候进程的脚本。
85. time :该守护进程从远程主机获取时间和日期,采用TCP协议。
86. time-udp: 该守护进程从远程主机获取时间和日期,采用UDP协议。
87. tux:在Linux内核中运行apache服务器的守护进程。
88. vsftpd:vsftpd服务器的守护进程。
89. vncserver:VNC (Virtual Network Computing,虚拟网络计算)。
90. xfs:X Window字型服务器守护进程,为本地和远程X服务器提供字型集。
91. xinetd:支持多种网络服务的核心守护进程。
92. ypbind:为NIS(网络信息系统)客户机激活ypbind服务进程 。
93. yppasswdd:NIS口令服务器守护进程。
94. ypserv:NIS主服务器守护进程。
95. yum:RPM操作系统自动升级和软件包管理守护进程。
可以根据自己的需要觉得是否启动某系服务。如:u、iptables等是必须要运行的。echo、echo-udp、daytime、daytime- udp、chargen、chargen -udp做调试用可以关闭。rsh、rstatd、rsync、rusersd、rwalld这些命令都是Berkley远程命令,因为都以字母r开头, 故称r*命令。主要使用来使一台计算机上的某个用户以相同的帐户远程执行另一台计算机的一个程序,不要可以关闭,减少隐患。innd是运行新闻组服务的进 程, 不要可以关闭。
 
 
----------------------------------------------------------
 
nohup是告诉系统忽略用户退出系统  
让进程运行直到进程结束为止  
比如我在远程打开ssh终端运行程序./server  
如果不用nohup当我关闭ssh终端时  
./server进程将会中止  
使用nohup   ./server   &  
可以在用户退出终端时  
进程能继续执行

IROS 2025机器人技术解析:从诡异设计到硬核应用 机器人技术正从传统的结构化环境应用,迈向复杂非结构化场景的深度交互。其核心原理在于通过仿生设计、多模态感知与智能控制算法,赋予机器人类似生物的适应性与交互能力。这一技术演进的价值在于突破传统机器人在极端环境、精密操作和自然交互中的瓶颈。例如,结合深度强化学习的全身动力学控制,使机器人能在废墟、管道等复杂地形中自主导航;而软体机器人技术则通过材料变形实现安全、柔顺的抓取操作。这些技术最终服务于极端环境巡检、精密装配和高端陪护等刚性应用场景,推动机器人从功能实现迈向与环境、人进行深度、智能交互的新阶段。 阅读详情

相关推荐

国标Gb28181里Contact和Route的使用

国标Gb28181是基于Sip协议的,因此对Contact和Route的使用,也可以说是Sip里Contact和Route的使用。Contact和Route则是sip协议里的头字段。 现在,在使用国标Gb28181来做项目时,经常会遇到这种情况,国标的下级是在内网里,上级在公网上。如果不做处理,下级到上级会经过nat协议的转换从而导致上级向下级发送请求时(比如获取目录请求)不能到达

wwyyxx26的专栏 5511

Linux将应用程序做成Systemd 服务

通过这些步骤,你就可以将你的应用程序创建为一个 Systemd 服务,并进行管理。记得根据你的实际情况修改单元文件的配置内容。的值为你软件的实际目录和启动命令。:使用文本编辑器打开。

qq_58733481的博客 632

自定义css属性实现渐变边框动画

自定义cs属性实现渐变边框动画

lemon的博客 1874

linux让某程序变为服务程序以及防火墙开放某个端口

搭建自己的服务时常常连不上网络的原因及如何让程序长期在后台运行

凤凰涅磐 777

深度学习中的编码器-解码器架构

解码的作用:转换为人类可理解的形式,解码器的任务是将编码器生成的中间表示(上下文向量)转换回人类可理解的输出形式(如翻译后的文本、生成的图像描述等)。解码器通过逐步生成输出序列,使得最终的输出符合人类的理解和需求。编码的作用:转换为机器可理解的形式,编码器将输入数据(如文本、图像等)转换为一种机器更容易处理和理解的形式,即上下文向量或编码。在深度学习中,编码器(Encoder)解码器(Decoder)是常见的神经网络架构,通常用于处理序列到序列(seq2seq)任务,如机器翻译、文本摘要和图像描述等。

xxk1323的博客 1093

vCenter Server出现no healthy upstream的解决方法

可以通过"VMware vCenter Server Management(服务)"来排查问题,在网页里面找到“服务”模块,会发现有很多服务没有启动起来,而且手动启动也无法启动。7.0 地址后,页面出现“no healthy upstream”,无法正常登录vCenter,重启后依旧如此,该故障的前提是没有对vCenter做过任何配置,如下图所示。于是用命令查询是否有证书过期,发现真有多个服务依赖的证书在当天早上过期。使用如下命令尝试打开服务发现不分服务可以打开,不分服务无法打开。

1万+

Linux中将程序定义成一个系统服务(自定义Service服务)

在Linux系统中将一个软件程序定义成一个系统服务,也就是自定义Service服务,然后通过systemctl命令进行管理,可以启动、停止、重启和重新加载服务。

积跬步,至千里。 4962

MATLAB实战:手把手教你搭建构网逆变器同步稳定性仿真模型(附避坑指南)

本文详细介绍了如何在MATLAB/Simulink平台上搭建构网逆变器同步稳定性仿真模型,涵盖从基础模块配置到虚拟同步机控制实现的完整流程。针对电力电子工程师常见的控制参数整定困难、仿真结果偏差等问题,提供了LCL滤波器谐振抑制、虚拟惯量优化等关键技术解决方案,并附有避坑指南和工程实践技巧,助力研究者高效完成仿真建模。

weixin_29051193的博客 297

Ubuntu:制作系统服务和进程管理

文章目录一、Ubuntu 启动过程1.1 SysVinit1.2 Upstart1.3 Systemd二、制作系统服务2.1 systemctl命令2.2 开机自启动三、进程管理3.1 查看进程3.2 杀死进程3.3 将进程放入后台运行 一、Ubuntu 启动过程 我们不去管计算机启动后加载 BIOS、读取 MBR 等操作,直接看加载内核后的初始化过程。 Linux init 系统主要有三种: SysVinit:Ubuntu 6.10 及之前的版本使用的init 系统; Upstart:Ubuntu 从

花城的博客 2236

【1.2】Costas环的基本原理概述

Costas环是一种用于载波恢复的相干解调技术,可直接从BPSK等抑制载波信号中恢复本地载波并完成解调。其核心结构包含同相/正交双支路处理,通过混频、低通滤波后,利用I/Q支路信号乘积进行相位误差检测,经环路滤波器调节VCO输出频率,实现载波同步。课程将重点讲解Costas环的MATLAB仿真实现、系统性能分析及FPGA开发,包括信号产生、频偏模拟、滤波器设计等模块,并通过AWGN信道和不同频偏条件下的测试验证系统性能。该技术无需单独提取载波,在数字通信系统中具有重要应用价值。

fpga/matlab/simulink算法仿真工程 450

高通蓝牙学习-- 关于Android 蓝牙的介绍

本文详细介绍了AOSP蓝牙架构及高通QCA芯片的蓝牙功能实现方案。主要内容包括:1)AOSP蓝牙架构在不同Android版本中的层次结构,重点分析BTHIDL层和libbt-vendor关键组件;2)QCA芯片的引导流程说明;3)两种获取libbt-vendor源码的方式(Google官方源和国内镜像源);4)针对QCA6595/6696/66x8/67x7芯片的具体实现方案,包括固件文件定义、厂商事件处理和补丁下载流程;5)蓝牙调试方法,包括logcat日志分析、HSU和Ellisys硬件跟踪技术。文章为

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 493

upstart把应用封装成系统服务

ubuntu实用工具系列文章 操作系统实用工具系列文章,将介绍基于Linux ubuntu的各种工具软件的配置和使用。有些工具大家早已耳熟能详,有些工具经常用到但确依然陌生。我将记录我在使用操作系统时,安装及配置工具上面的一些方法,把使用心得记录下来也便于自己的以后查找和回忆。 关于作者 张丹(Conan), 程序员Java,R,PHP,J...

fens的博客 382

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

把linux可执行程序做成一个服务[转]

转自:http://www.2cto.com/os/201202/121249.html 在linux系统启动的时候,我们可以看到很多服务性程序一个接一个的被启动(就是那些后面有一个兰色[OK]的行),这些在后台运行的程序为我们使用计算机起了很重要的作用,以这种方式运行的程序有以下特点: 开机启动,关机停止(废话!关机了还运行啊???) 后台运行 通过service 命令控制或查看对应的程...

weixin_33856370的博客 1046

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

将可执行程序添加为 linux 系统服务

【代码】将可执行程序添加为 linux 系统服务。

wxl5018的专栏 934

linux_把可执行程序做成一个服务

 把可执行程序做成一个服务    在linux系统启动的时候,我们可以看到很多服务性程序一个接一个的被启动(就是那些后面有一个兰色[OK]的行),这些在后台运行的程序为我们使用计算机起了很重要的作用,以这种方式运行的程序有以下特点: 开机启动,关机停止(废话!关机了还运行啊???) 后台运行 通过service 命令控制或查看对应的程序的运行状态    恩,不错,那怎么把我们自己编制的程序做成这样

笑看源码 1万+

把linux可执行程序做成一个服务

在linux系统启动的时候,我们可以看到很多服务性程序一个接一个的被启动(就是那些后面有一个兰色[OK]的行),这些在后台运行的程序为我们使用计算机起了很重要的作用,以这种方式运行的程序有以下特点:     开机启动、关机停止、后台运行     通过service 命令控制或查看对应的程序的运行状态     恩,不错,那怎么把我们自己编制的程序做成这样的一个服务呢?       废话少说

wanglei9876开发人生 2571

linux可执行程序做成服务管理

linux可执行程序做成服务管理

yangxiluo的博客 998

把可执行程序做成一个服务

把可执行程序做成一个服务    在linux系统启动的时候,我们可以看到很多服务性程序一个接一个的被启动(就是那些后面有一个兰色[OK]的行),这些在后台运行的程序为我们使用计算机起了很重要的作用,以这种方式运行的程序有以下特点: 开机启动,关机停止(废话!关机了还运行啊???) 后台运行 通过service 命令控制或查看对应的程序的运行状态    恩,不错,那怎么把我们自己编制的程序做

jiahehao的专栏 1466
上一篇: Ubuntu下GTK的安装、编译和测试
下一篇: Ubuntu PPA
weistar103
博客等级 码龄18年 12粉丝 281原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值