Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

ulimit -l unlimited

The following line is also needed to run the ioc with real-time priorities:

ulimit -r unlimited

Finally, you will be running your 'virtual' ioc as a specific user called as 'laci' who has permissions to run this ioc.:
Setup the permissions for this user 'laci':

umask 002

Now you are ready to start your IOC and have it run as a foreground process.

Create a directory called as 'vioc-b34-bd32' for your 'virtual' ioc process under the following directory:

$IOC/ioc-b34-bd32
 
cd $IOC/ioc-b34-bd32/vioc-b34-bd32
 
Set up a soft link to the 'bin' directory of your IOC app that you created in step (6):

ln -s  /afs/slac/g/lcls/epics/R3-14-12-3_1-0/iocTop/Test/Development/bin/linuxRT-x86 bin

Create an ASCII text file called 'screenrc' with the following lines in it:

deflog on

logtstamp on

defscrollback 10000

'screenrc' is passed as an argument to the 'screen' process and allows us to customize a few parameters such as number of lines stored in history buffer that we can scroll back for viewing.

In the same directory $IOC/ioc-b34-my01/vioc-b34-my01, add a startup script 'iocStartup.cmd' for vioc-b34-my01:
This script is very similar to the Soft IOC startup scripts that we are familiar with.

It setups some env variables used It setups some shell environment variables used by all iocs, then changes to the ioc boot directory and starts the st.cmd file.12. How do I start my ioc and monitor it?

The EPICS environment variables that are set in this script can be used by your application's st.cmd script.

The default st.cmd script generated by the module icdTemplates, expects the following environment values to be defined somewhere.

iocStartup.cmd may be a good place to define it:

epicsEnvSet("IOC_NAME","VIOC:B34:BD32")

epicsEnvSet("IOC_APP","Example, from any lcls-dev host ssh to your ioc as 'laci':
ssh laci@ioc-b34-bd32
$ cd /afs/slac/g/lcls/epics/iocCommon/iocR3-b34-bd32
Ensure that 'startupConsole-laci-rt.cmd' is in your current directory.
Start the virtual ioc as a foreground process:
./startupConsole-laci-rt.cmd

13. How do I start my ioc automatically every time my server boots up?

You can start your ioc as a background process that will start up everytime your Linux server reboots, as follows:

14-12-3_1-0/iocTop/Test/Development")

epicsEnvSet("IOC_BOOT","${IOC_APP}/iocBoot/vioc-b34-bd32")

epicsEnvSet("IOC_COMMON","/afs/slac/g/lcls/epics/iocCommon")

epicsEnvSet("SYS_FACILITY","SYS0")

In addition to setting these environment variables, this script also executes some scripts common to all EPICS IOCs, such as below:

${IOC_COMMON}/All/Dev/linuxRT_pre_st.cmd

${IOC_COMMON}/All/Dev/linuxRT_post_st.cmd

The IOC Apllication Startup is sandwiched between the above  two scirpts:

cd ${IOC_BOOT}

< st.cmd

12. What are the guidelines for creating App-specific st.cmd?

Work is still in progress regarding standardizing App-specific st.cmd.

 The IOC engineer has freedom to be as creative with this script during development;

but the following are expected as a minimum when the ioc is installed in production.

That is the reason they are included in the default template provided by the icdTemplates module as a guideline:



13. How do I start my ioc and monitor it?

Example, from any lcls-dev host ssh to your ioc as 'laci':

ssh laci@ioc-b34-bd32

$ cd /afs/slac/g/lcls/epics/iocCommon/ioc-b34-bd32

Ensure that 'startupConsole-laci-rt.cmd' is in your current directory.

Start the virtual ioc as a foreground process:

./startupConsole-laci-rt.cmd

14. How do I start my ioc automatically every time my server boots up?

You can start your ioc as a background process that will start up everytime your Linux server reboots, as follows:

In $IOC/ioc-b34-bd32, you can add another script 'startup-laci-rt.cmd' that lets you start your EPICS-based 'virtual' ioc as a background process in your host.

Invoke this script from  $IOC/ioc-b34-bd32/startup.cmd:

su laci -c /usr/local/lcls/epics/iocCommon/eioc-b34-bd32/startup-laci-rt.cmd

The above line starts another shell so that the user called "laci" can start the IOC Process as opposed to the "root" account

Remember, the kernel modules can only be loaded onto the kernel with "root" permissions but iocs can be run by users.

In $IOC/ioc-b34-bd32, you can add another script 'startup-laci-rt.cmd' that lets you start your EPICS-based 'virtual' ioc as a background process in your host.

Invoke this script from  $IOC/ioc-b34-bd32/startup.cmd directly after the kernel modules are loaded, as below:

.

/afs/slac/g/lcls/epics/iocCommon/eioc-b34-bd32/kernel-modules.cmd

su laci -c /usr/local/lcls/epics/iocCommon/eioc-b34-bd32/startup-laci-rt.cmd

The above line starts another shell so that the user called "laci" can start the IOC Process as opposed to the "root" account

Remember, the kernel modules can only be loaded onto the kernel with "root" permissions but iocs can be run by users.

'startup-laci-rt.cmd' executes the EPICS-based IOC startup script and detaches it using the linux screen program

It contains the following lines which are similar to what we have in startupConsole-laci-rt.cmd:

# Lock Kernel in memory
ulimit -l unlimited
# Run with real-time priorities
ulimit -r unlimited

# Set umask for the laci user
umask 002

# EPICS IOC Application Real-time Process

cd $IOC/ioc-b34-bd32/vioc-b34-bd32

 screen -h 8192 -dm -S vioc-b34-b32 `pwd` $APP/Test/Development/bin/linuxRT-x86/MyTest iocStartup.cmd

The above line will automatically start your ioc and have it running in the background, every time your server reboots

executes the EPICS-based IOC startup script and detaches it using the linux screen program

It contains the following lines which are similar to what we have in startupConsole-laci-rt.cmd:

export EPICS_IOCS=/afs/slac/g/lcls/epics/iocCommon

# Lock Kernel in memory
ulimit -l unlimited
# Run with real-time priorities
ulimit -r unlimited

# Set umask for the laci user
umask 002

# EPICS IOC Application Real-time Process

cd $EPICS_IOCS/ioc-b34-bd32/vioc-b34-bd32

 screen -h 8192 -c screenrc -dm -S vioc-b34-bd32 bin/MyTest iocStartup.cmd 

The above line will automatically start your ioc and have it running in the background, every time your server reboots

 

 

To view the console output from the running ioc, you can attach the screen process to it, as described below:

(1)   ssh into the ioc-b34-b32 as user  "laci":

ssh laci@ioc-b34-bd32

 

(2) To see the list of all EPICS iocs running on this CPU, at the console type:

screen  -ls

 

(3) To attach to vioc-b34-b32 that is running MyTest application:

screen -r vioc-b34-b32

 

(4) To detach screen process from vioc-b34-bd32, press:

 

While pressing <CTRL> key, press ''A" and then 'D".

 

(5) You can also connect to vioc-b34-bd32 from any linux host, not just from ioc-b34-bd32.

 

This method uses the python-based iocConsole program.

 

ssh into LCLSDEV host (example, lcls-dev2) an type:

 

iocConsole  vioc-b34-bd32

 

 

 

1514. Which script calls what and what parameters are passed from one to another?

...