[[PageOutline]] = Submitting jobs locally = == On the command line == #creatework-tool '''create_work''' is a command-line tool for submitting jobs. Run it from the project root directory. {{{ create_work [ arguments ] infile_1 ... infile_n }}} Create a job with the given input files (which must already be [JobStage staged]). Mandatory arguments: --appname name:: application name Optional arguments: --wu_name name:: workunit name (default: appname_PID_TIME) --wu_template filename:: [JobTemplates#Inputtemplates Input template] filename relative to project root; usually in templates/. Default: templates/appname_in. --result_template filename:: [JobTemplates#Outputtemplates Output template] filename, relative to project root; usually in templates/. Default: templates/appname_out. --batch n:: associate the job with the given batch. --priority n:: high values are assigned before low values; see --priority_order and --priority_order_create_time options on the [BackendPrograms#feeder feeder] --stdin:: Read stdin, and create one job per line (see below). --continue_on_error:: keep going if an error occurs (used with --stdin) --broadcast, --target_host, etc.:: [AssignedWork Assign or broadcast] this job. --keywords "1 2 3":: list of keyword IDs --app_version_num N:: process the job with version N app versions. The following [JobIn job parameters] may be passed in the [JobTemplates#Inputtemplates input template], or as command-line arguments to create_work; the input template has precedence. If not specified, the given defaults will be used. --command_line "-flags foo":: --rsc_fpops_est x:: FLOPs estimate; default 3600e9 --rsc_fpops_bound x:: FPOPs bound; default 86400e9 --rsc_memory_bound x:: default 5e8 --rsc_disk_bound x:: default 1e9 --rsc_bandwidth_bound x:: 0 (no bound) --credit X:: Set the [CreditOptions pre-assigned credit] for this job. --delay_bound x:: default 1 week --hr_class N:: [HomogeneousRedundancy homogeneous redundancy] class --min_quorum x:: default 2 --target_nresults x:: default 2 --max_error_results x:: default 3 --max_total_results x:: default 10 --max_success_results x:: default 6 --opaque N:: === Remote input files === By default, input files are [JobStage staged] locally on the project server, and are identified by their filename. However, you can also use input files that are remote, i.e. on a web server other than the project server. In that case you must specify them as {{{ --remote_file URL nbytes MD5 }}} where MD5 is the file's MD5 hash. The resulting file will have physical name '''jf_MD5'''; i.e. on the client, the project directory will contain the file with the physical name, and the slot directory will contain a [BoincFiles link file] of the form ../../projects/PROJECT_URL/jf_MD5 === Creating multiple jobs === The '''--stdin''' option lets you create many jobs with a single invocation of '''create_work''', increasing the efficiency of creating large batches of jobs. Descriptions of the jobs are read from standard input. Each line specifies a job, and may include the following options: --command_line "x":: the command line --wu_name name:: the job name --target_host ID, --target_user ID:: [AssignedWork assign this job to a host or user]. --wu_template filename:: input template file --result_template filename:: output template file --priority N:: job priority The remaining items specify input files: either physical filenames, or '''--remote_file''' arguments as described above. For example, suppose you have input files named '''file1''' ... '''filen''' (already [JobStage staged]), and you want to submit a job for each file. You could create a file '''file_list''' containing {{{ file1 file2 ... filen }}} and then submit the jobs by typing {{{ bin/create_work --appname name --stdin < file_list }}} == From a C++ program == #cpp-workgen BOINC's library provides a function for submitting jobs: {{{ int create_work( DB_WORKUNIT& wu, const char* wu_template, // contents, not path const char* result_template_filename, // relative to project root const char* result_template_filepath, // absolute or relative to current dir const char** infiles, // array of input file names int ninfiles SCHED_CONFIG&, const char* command_line = NULL, const char* additional_xml = NULL ); }}} The ''name'' and ''appid'' fields of the DB_WORKUNIT structure must always be initialized. Other job parameters may be passed either in the DB_WORKUNIT structure or in the [JobTemplates#Inputtemplates input template file] (the latter has priority). On a successful return, wu.id contains the database ID of the workunit. If you want to use remote input files, use the following variant: {{{ int create_work2( DB_WORKUNIT& wu, const char* wu_template, // contents, not path const char* result_template_filename, // relative to project root const char* result_template_filepath, // absolute or relative to current dir vector infiles, // list of input file descriptions; see below SCHED_CONFIG&, const char* command_line = NULL, const char* additional_xml = NULL ); struct INFILE_DESC { bool is_remote; // the following defined if remote (physical name is jf_MD5) // double nbytes; char md5[64]; char url[1024]; // make this a vector to support multiple URLs // the following defined if not remote // char name[1024]; // physical name }; }}}